如何在MySQL中基于GROUP_CONCAT生成带车型存在性判断的查询结果
解决方案
要实现你需要的结果,核心是按年份分组,同时完成两个操作:合并同一年的车型、判断指定品牌是否存在。以下是修正后的查询语句:
SELECT year AS `Year`, GROUP_CONCAT(DISTINCT Cars ORDER BY Cars SEPARATOR ', ') AS `Car Model`, CASE WHEN MAX(CASE WHEN Cars = 'TOYOTA' THEN 1 ELSE 0 END) = 1 THEN 'YES' ELSE 'NO' END AS TOYOTA, CASE WHEN MAX(CASE WHEN Cars = 'FORD' THEN 1 ELSE 0 END) = 1 THEN 'YES' ELSE 'NO' END AS FORD FROM table1 GROUP BY year ORDER BY year;
语句说明:
- GROUP BY year:按年份分组,确保每个年份只返回一行结果。
- GROUP_CONCAT(...):将同一年的所有车型按字母排序后用逗号拼接,
DISTINCT可避免同一年出现重复车型时重复拼接。 - CASE判断逻辑:
- 内层
CASE:如果当前行车型是目标品牌,标记为1,否则0; - 外层
MAX():聚合后只要该年份有一个目标品牌,结果就是1,否则0; - 最终外层
CASE:将1转为'YES',0转为'NO'。
- 内层
预期输出:
| Year | Car Model | TOYOTA | FORD |
|---|---|---|---|
| 2000 | BMW, Maruti Suzuki, TOYOTA | YES | NO |
| 2001 | Chevrolet, Daimler, Volkswagen | NO | NO |
内容的提问来源于stack exchange,提问作者Imran
相关产品推荐
相关产品推荐

