2014-10-15 6 views
1

У меня есть простая таблица, которая хранит все данные при входе в систему.SQL GROUP По двум столбцам, но группировка одна за другой

id | user_id | ip | date

Как вы знаете, у меня есть пользователи, регистрирующие много IP-адресов и пользователей, регистрирующихся с одного IP-адреса. Я хочу получить те, которые регистрируются с одного IP-адреса. Так что мне нужно GROUP BY ip, но также нужно количество UNIQUE user_id, у которого есть данные с этим IP. И я хочу заказать его большинством пользователей, регистрирующихся с одного и того же IP-адреса.

Проблема состоит в группах GROUP BY с помощью ip и user_id. Наверное, мне нужен внутренний запрос, но я понятия не имею, как это сделать.

SELECT *, COUNT(`id`) 
FROM `TABLE` 
GROUP BY `ip`, `user_id` 
ORDER BY COUNT(`id`) 

Любая идея? :)

ответ

2

Вы ищете the DISTINCT keyword:

SELECT IP, COUNT(DISTINCT user_ID) AS NumberOfUsers 
FROM TABLE 
GROUP BY IP 
HAVING COUNT(DISTINCT user_ID) > 1 -- this will filter to show only IPs with multiple users 
ORDER BY NumberOfUsers DESC 
+0

Спасибо :) Это было очень полезно. Любитель! –

0

Я думаю, что это то, что вы ищете:

SELECT user_id, COUNT(DISTINCT ip) as unique_ip_count 
    FROM TABLE 
    GROUP BY user_id 
    HAVING COUNT(DISTINCT ip)=1 
Смежные вопросы