sql - 基于大小写的 SQL 过滤器
问题描述
我有一张这样的桌子:
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
我似乎无法找出正确的方法来解决这个问题。
解决方案
您可以使用聚合:
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')
推荐阅读
- python - 如何在 Python 中从 Outlook Web App 获取附件
- docker - 将 Docker 内部生成的 ssh 密钥用作“假”SSH 密钥是否安全?
- c++ - 在 Gnuplot 的直方图上叠加一条线
- php - 在 PHP 和 Jquery 中使用 md5 更改密码
- docker - Jenkins Docker 插件无法连接到 Docker 服务器主机 url
- mysql - 如何创建 SQL 查询来更新表中的数据?
- racket - 返回大写字母
- c# - 解决 MSBuild 警告 MS0109
- mysql - 如何将列添加到包含数百万数据的表中
- visual-c++ - 如何强制 cmake 使用 Visual Studio 2015 (v140) 平台工具集?