SQL场景下如何根据用户拥有的水果类型对PartyID分组
根据用户拥有的水果类型分组的SQL解决方案
核心实现代码
SELECT PartyID, Name, CASE WHEN HasApple = 1 AND HasOrange = 1 THEN '同时拥有苹果和橙子' WHEN HasApple = 1 THEN '仅苹果' WHEN HasOrange = 1 THEN '仅橙子' ELSE '无水果' END AS FruitGroup FROM ( SELECT PartyID, Name, -- 标记用户是否拥有苹果 MAX(CASE WHEN Description = 'Apple' THEN 1 ELSE 0 END) AS HasApple, -- 标记用户是否拥有橙子 MAX(CASE WHEN Description = 'Orange' THEN 1 ELSE 0 END) AS HasOrange FROM Party GROUP BY PartyID, Name ) AS UserFruits
实现思路
- 子查询聚合:按
PartyID和Name分组,用条件聚合MAX(CASE...)分别标记每个用户是否拥有苹果和橙子(存在则为1,否则为0)。 - 外层分组判断:通过
CASE语句根据HasApple和HasOrange的组合值,将用户归入对应的分组:- 两者都为1 → 同时拥有苹果和橙子
- 仅
HasApple为1 → 仅苹果 - 仅
HasOrange为1 → 仅橙子
验证结果
执行后会得到符合需求的分组:
- John(123)、Jack(789)→ 同时拥有苹果和橙子
- Jane(456)→ 仅橙子
- Jill(012)→ 仅苹果
内容的提问来源于stack exchange,提问作者seequill
相关产品推荐
相关产品推荐

