2013-10-11 2 views
0

Я пытаюсь вернуть число возвращаемых пользователей, которое происходит, когда есть дубликат user_id и action_type.SQL count of return users

Итак, если вы обратитесь ниже, я бы хотел, чтобы мой результат был равен = 2, так как user_id (5) имеет 2 похожих типа action_types (234), а user_id (6) также имеет 2 похожих типа action_types (585).

Как структурировать свой запрос, чтобы отразить это?

Table t1 
User_Id  Action_Type 
--------- ------------ 
5   234 
5   846 
5   234 
6   585 
6   585 
7   465 

ответ

3
SELECT COUNT(DISTINCT User_Id) FROM (
    SELECT User_Id 
    FROM  t1 
    GROUP BY User_Id, Action_Type 
    HAVING COUNT(*) > 1 
) t 
0
SELECT COUNT(User_ID) DuplicateRecordsUsers 
FROM 
(SELECT User_ID, Action_Type, COUNT(User_ID) Records 
FROM  Table  
GROUP BY User_ID, Action_Type 
HAVING COUNT(User_ID) > 1 
) 
0
SELECT COUNT(User_Id) FROM (
    SELECT User_Id 
    FROM  t1 
    GROUP BY User_Id, Action_Type 
    HAVING COUNT(*) > 1 
) t 

DISTINCT не требуется просто сосчитать идентификаторы возвращаются требуется

+0

'DISTINCT'. Представьте себе, что '' (5, 846) 'появилось дополнительное время в данных примера OP: тогда' User_Id = 5' будет возвращен дважды подзапросом (один раз для каждого 'Action_Type'); таким образом искажая общий счет. – eggyal

+0

Good Point - я согласен – Infojam