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

MySQL按相同wallet_id分组展示数据的实现咨询

解决SQL分组展示重复字段空值的问题

你用GROUP BY的思路错了——GROUP BY的作用是聚合数据(比如计算每组的存款总和、记录数),不是用来做这种重复字段空值的格式化展示。你写的SQL本身不符合SQL标准(SELECT中的非聚合列id、wallet_name不在GROUP BY子句中),不同数据库要么报错,要么返回每组的随机一条记录,自然达不到你要的效果。

要实现你预期的展示效果,应该用窗口函数或变量标记每组的第一条记录,再控制wallet_id的显示:

支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)

SELECT
    CASE WHEN rn = 1 THEN wallet_id ELSE '' END AS wallet_id,
    id,
    wallet_name
FROM (
    SELECT
        wallet_id,
        id,
        wallet_name,
        ROW_NUMBER() OVER (PARTITION BY wallet_id ORDER BY id) AS rn
    FROM wallet
) t
ORDER BY wallet_id, id;

不支持窗口函数的数据库(如MySQL 5.x)

SELECT
    IF(@prev_wallet_id = wallet_id, '', wallet_id) AS wallet_id,
    id,
    wallet_name,
    @prev_wallet_id := wallet_id
FROM wallet, (SELECT @prev_wallet_id := '') t
ORDER BY wallet_id, id;

逻辑说明

  • 窗口函数方案:子查询中通过ROW_NUMBER() OVER (PARTITION BY wallet_id ORDER BY id)给每个wallet_id分组内的记录按id排序并分配行号,组内第一条记录行号为1;外层用CASE判断,行号为1时显示wallet_id,否则显示空字符串,最终按wallet_id和id排序得到目标格式。
  • 变量方案:通过自定义变量@prev_wallet_id记录上一条的wallet_id,对比当前记录的wallet_id,相同则显示空,否则显示当前wallet_id,同时更新变量值,最后排序得到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:31:02