MySQL按喜好分组收集姓名并按总分排序的SQL查询问题
MySQL按分组拼接名称并按总分排序
我之前提过相关问题,重新梳理后发现需求更复杂,现重新提问:
现有student表数据如下:
table: student | FAVORITE | NAME | score1 | score2 | |----------|--------|--------|--------| | math | john | 98 | 97 | | chem | ryan | 97 | 100 | | history | yinyin | 80 | 95 | | math | oda | 99 | 100 | | history | ed | 67 | 85 |
需求
按FAVORITE字段分组,收集每组的NAME值,且NAME需按score1 + score2的总分升序排列后用逗号拼接,期望结果如下:
table:favorite | FAVORITE | NAME | |----------|------------| | math | john, oda | | chem | ryan | | history | ed, yinyin |
我尝试的SQL(未实现需求)
SELECT FAVORITE, GROUP_CONCAT( select name from ( select name, sum(score1 + score2) as total_score from student group by name order by total_score asc ) as T ) AS NAME FROM student GROUP BY FAVORITE;
解决方案
你的问题出在GROUP_CONCAT内部的子查询未关联分组,且错误地全局查询所有name。正确做法是直接在分组内按总分排序后拼接:
SELECT FAVORITE, GROUP_CONCAT(NAME ORDER BY (score1 + score2) ASC SEPARATOR ', ') AS NAME FROM student GROUP BY FAVORITE;
说明
GROUP_CONCAT原生支持ORDER BY子句,直接在函数内指定排序规则即可,无需嵌套复杂子查询- 从表结构看每个
NAME对应唯一记录,直接用score1 + score2计算单条记录总分即可,不需要SUM SEPARATOR ', '指定拼接分隔符,匹配期望结果的格式
内容的提问来源于stack exchange,提问作者dhanyn10
相关产品推荐
相关产品推荐

