You need to enable JavaScript to run this app. MySQL查询全表数据按serial字段分组组织关联行的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询全表数据按serial字段分组组织关联行的实现方法

问题原因

你之前使用的GROUP BY是MySQL的聚合语法,作用是将同serial的多条记录合并为单条记录用于计数、求和等聚合计算,自然无法得到需要的分层展示结果。

实现方案

方案1:SQL层直接生成格式化结果(推荐MySQL 8.0及以上版本)

利用窗口函数给同分组内的行做编号,首行输出分组字段值,其余行输出缩进后的拼接内容:

WITH ranked_data AS (
    SELECT 
        serial,
        vehicule,
        alert_emails,
        -- 按serial分组,给组内每行生成序号
        ROW_NUMBER() OVER (PARTITION BY serial ORDER BY vehicule) AS group_row_num
    FROM mytable
)
SELECT 
    CASE 
        WHEN group_row_num = 1 THEN CAST(serial AS CHAR)
        ELSE CONCAT('   ', vehicule, '|', alert_emails) 
    END AS format_result
FROM ranked_data
ORDER BY serial, group_row_num;

输出结果完全匹配你需要的层级结构。

方案2:兼容MySQL 5.x版本实现

如果使用不支持窗口函数的低版本MySQL,可以用用户变量实现相同逻辑:

SELECT 
    CASE 
        WHEN @last_serial != serial THEN CAST((@last_serial := serial) AS CHAR)
        ELSE CONCAT('   ', vehicule, '|', alert_emails) 
    END AS format_result
FROM mytable, (SELECT @last_serial := -1) AS init_var
ORDER BY serial, vehicule;

方案3:应用层处理(更推荐)

如果不要求必须在SQL侧完成格式拼接,更建议先查询所有按serial排序的原始数据:

SELECT serial, vehicule, alert_emails FROM mytable ORDER BY serial, vehicule;

再在业务代码中遍历结果集,判断serial是否变化,自行拼接缩进格式,这种方式灵活度更高,后续调整格式也无需修改SQL。

内容的提问来源于stack exchange,提问作者Dev Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:45:02