SQL查询需求:筛选图书数量多于DVD数量的用户
解决用户图书数量大于DVD数量的筛选需求
嘿,我来帮你搞定这个SQL筛选问题!先把你的需求再捋一遍:我们要找出图书总数量大于DVD总数量的用户姓名,同时要处理两种特殊情况——只有单条记录的用户,以及有两条记录但DVD更多的用户要排除。
核心思路:按用户分组,聚合计算两类物品的数量后比较
假设你的数据表结构大概是这样的(字段名如果不一样,你可以对应替换):
names:用户姓名item_type:物品类型(值为'book'或'DVD')quantity:该类型物品的数量
下面这个SQL语句就能直接满足你的需求:
SELECT names FROM your_table_name -- 这里替换成你的实际表名 GROUP BY names HAVING SUM(CASE WHEN item_type = 'book' THEN quantity ELSE 0 END) > SUM(CASE WHEN item_type = 'DVD' THEN quantity ELSE 0 END);
为什么这个语句能覆盖所有情况?
- 只有图书记录的用户:DVD的总数量会被计算为0,图书数量大于0,自然满足
book数量 > DVD数量,会被筛选出来 - 只有DVD记录的用户:图书总数量是0,0不大于DVD数量,会被自动排除
- 有两条记录但DVD更多的用户:聚合后的DVD总数量大于图书,
HAVING条件不满足,直接排除 - 有两条记录且图书更多的用户:聚合后的图书数量大于DVD,会被选中
如果每条记录对应单个物品(quantity都是1)
如果你的表中每条记录代表一个单独的物品,quantity字段都是1,那可以用COUNT代替SUM,写法更简洁:
SELECT names FROM your_table_name GROUP BY names HAVING COUNT(CASE WHEN item_type = 'book' THEN 1 END) > COUNT(CASE WHEN item_type = 'DVD' THEN 1 END);
内容的提问来源于stack exchange,提问作者terpscodadyo
相关产品推荐
相关产品推荐

