【问题标题】:SQL Filter based on Case基于大小写的 SQL 过滤器
【发布时间】:2020-02-18 22:54:14
【问题描述】:

我有一张这样的桌子:

email | event

e1     a   
e1     c
e2     a
e3     b
e4     a
e4     b
e5     c
e6     d

我正在尝试创建一个查询,该查询仅获取具有事件 a 的人

期望的输出:

email  |  attended

e2       0

这是我的 SQL:

SELECT
    tm.email,
    MAX(
    CASE
    WHEN tm.event = 'b' or tm.event = 'c' THEN 1
    ELSE 0
    END)
    as attended,
FROM
    table.events as tm
WHERE
    tm.event IN ('a', 'b', 'c', 'd')
    AND attended = 0
GROUP BY
    tm.email, attended

我似乎无法找出解决此问题的正确方法。

【问题讨论】:

    标签: sql group-by case


    【解决方案1】:

    你可以使用聚合:

    select email
    from events
    group by email
    having max(case when event = 'a' then 0 else 1 end) = 0
    

    或者,如果您想要整个记录,您可以使用not exists 条件进行过滤:

    select e.*
    from events e
    where 
        e.event = 'a'
        and not exists (select 1 from events e1 where e1.email = e.email and e1.event <> 'a')
    

    【讨论】:

      【解决方案2】:

      如果您想要只有 'a' 的电子邮件,那么我会使用聚合,但像这样:

      select email
      from events
      group by email
      having min(event) = max(event) and min(event) = 'a';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 2013-08-07
        相关资源
        最近更新 更多