SQL查询:筛选至少有1个9999产品码且非9999产品码超10个的用户
查询需求说明
待查询数据表共包含3个字段:
ID:记录主键IDUserID:用户唯一标识IDProductCodes:关联产品编码
表内示例数据如下:
| ID | UserID | ProductCodes |
|---|---|---|
| 1 | 33 | 9999 |
| 2 | 456 | 3051 |
| 3 | 456 | 9999 |
| 4 | 456 | 3051 |
| 4 | 33 | 9999 |
需要筛选同时满足以下两个条件的用户:
- 至少拥有1条
ProductCodes = '9999'的记录 - 所持有的
ProductCodes <> '9999'的记录总数量大于10
参考SQL实现
假设数据表名为user_product_records,可直接使用如下聚合查询实现需求,单次扫描表即可完成筛选,查询效率更高:
SELECT UserID FROM user_product_records GROUP BY UserID HAVING -- 校验存在9999产品编码记录 SUM(CASE WHEN ProductCodes = '9999' THEN 1 ELSE 0 END) >= 1 -- 校验非9999的记录数大于10 AND SUM(CASE WHEN ProductCodes <> '9999' THEN 1 ELSE 0 END) > 10;
说明:在MySQL等支持布尔值隐式转数值的方言中,可以简化写法为
SUM(ProductCodes = '9999') >= 1,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Vitruviauz
相关产品推荐
相关产品推荐

