如果组有一些行,则选择SQL组

时间:2016-03-21 16:53:37

标签: sql

我有一张表users

user_id   site       event    date
---------------------------------
ITB001    A          open     01-15
ITB001    A          open     02-15
ITB001    A          close    03-15
ITB001    B          open     02-15
ITB001    B          open     01-15 
MKB114    A          open     04-15
MKB114    A          close    05-15

我希望得到小组。

仅当组具有event = close和date = 03-15的行时,此示例此表

user_id   site    sum_event   
---------------------------
ITB001    A       3

有一种简单的方法可以获得这个吗?没有大字符串查询?

哪个查询非常快?

2 个答案:

答案 0 :(得分:1)

SELECT
    U1.user_id,
    U1.site,
    COUNT(*)
FROM
    Users U1
WHERE
    EXISTS (
        SELECT *
        FROM Users U2
        WHERE
           U2.user_id = U1.user_id AND
           U2.site = U1.site AND
           U2.[date] = '03-15'
    )
GROUP BY
    U1.user_id,
    U1.site

答案 1 :(得分:1)

这是一个带有having子句的非常基本的聚合查询。这是一种方法:

select user_id, site, count(*)
from users u
group by user_id site
having sum(case when event = 'close' and date = '03-15' then 1 else 0 end) > 0;