You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:15:35