假设我有一个订阅表:
uid | subscription_type
------------------------
Alex | type1
Alex | type2
Alex | type3
Alex | type4
Ben | type2
Ben | type3
Ben | type4
并希望仅选择具有2个以上订阅但从未订阅类型1的用户
预期结果是只选择“Ben”。
我很容易就能找到拥有2个以上订阅的用户:
SELECT uid
FROM subscribes
GROUP BY uid
HAVING COUNT(*) > 2
但是如何检查在一个组中某个值是否永远不存在呢?
谢谢你的帮助!
4条答案
按热度按时间bihw5rsg1#
试试这个查询:
rvpgvaaj2#
要检查某些内容是否不存在,请使用
NOT EXISTS(...)
:u0njafvf3#
创建样本表:
插入值:
SQL查询:
输出量:
iszxjhcz4#
如果你想知道一个类型是否存在于 predicate 操作中,那么使用
HAVING
clause是你最好的选择,正如其他答案所指出的那样。要显示一个特定的组是否包含一条记录,您可以合并
CASE
expression检查每一行,MAX
function评估组中的所有行,如下所示:它将返回:
| uid| type1| 2型|type3| type4|
| --|--|--|--|--|
| 亚历克斯| 1 | 1 | 1 | 1 |
| Ben| 0 | 1 | 1 | 1 |
SQL Fiddle演示
进一步阅读