查询category表中仅含food与sport组合的cat_id
找出仅包含food和sport的类别组合解决方案
嗨,这就帮你搞定这个SQL查询需求!咱们要从category表中揪出只由food和sport这两个支出类别组成的cat_id——简单说就是,这个cat_id对应的所有spending_category只能是这俩,不能多也不能少。
方案一:分组后用多条件校验
这是最直观的写法,通过分组后同时满足两个核心条件:
SELECT cat_id FROM category GROUP BY cat_id HAVING -- 确保该cat_id刚好对应2个不同的支出类别 COUNT(DISTINCT spending_category) = 2 -- 确保这2个类别全是food和sport,没有其他额外类别 AND SUM(CASE WHEN spending_category IN ('food', 'sport') THEN 1 ELSE 0 END) = 2;
方案二:先排除不合格项,再筛选目标
先把那些包含非food/sport类别的cat_id全部排除,再从剩下的里面找刚好有2个类别的(也就是同时包含food和sport的):
SELECT cat_id FROM category WHERE cat_id NOT IN ( -- 先找出所有带其他类别的cat_id SELECT cat_id FROM category WHERE spending_category NOT IN ('food', 'sport') ) GROUP BY cat_id -- 确保剩下的cat_id刚好覆盖food和sport两个类别 HAVING COUNT(DISTINCT spending_category) = 2;
结果说明
这两个查询都会返回cat_id = 1:
cat_id=2因为包含movie,会被条件过滤掉cat_id=3同样带有movie,也会被排除在外
内容的提问来源于stack exchange,提问作者amrit chhetri
相关产品推荐
相关产品推荐

