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

PostgreSQL中保留原序列去除group列重复值的需求

需求说明

现有数据库表数据如下:

|   group   |   account   |   description   |   balance   |   balance1   |
+----------+-------------+-----------------+-------------+--------------+
|  123123  |       0     |      Name 1     |    1000.00  |      0       |
|  123123  |      777    |      Name 2     |     250.00  |      0       |
|  123123  |      999    |      Name 3     |       0     |     350.00   |
|  123000  |       0     |      Name 4     |     500.00  |      0       |
|  123000  |      567    |      Name 5     |       0     |     500.00   |

执行select * from table;得到上述结果,要求不使用GROUP BY和ORDER BY,保留原有输出顺序,仅在group列值首次出现时显示,后续重复项留空,其他列数据和顺序保持不变,期望结果:

|   group   |   account   |   description   |   balance   |   balance1   |
+----------+-------------+-----------------+-------------+--------------+
|  123123  |       0     |      Name 1     |    1000.00  |      0       |
|          |      777    |      Name 2     |     250.00  |      0       |
|          |      999    |      Name 3     |       0     |     350.00   |
|  123000  |       0     |      Name 4     |     500.00  |      0       |
|          |      567    |      Name 5     |       0     |     500.00   |
解决方案

核心是通过对比当前行与前一行的group值,判断是否显示该值,全程不改变原有数据顺序。

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

使用LAG()窗口函数获取前一行的group值,结合条件判断实现空值替换:

SELECT 
    CASE 
        WHEN LAG(`group`) OVER () = `group` THEN '' 
        ELSE `group` 
    END AS `group`,
    account,
    description,
    balance,
    balance1
FROM your_table_name;

提示:group是SQL关键字,需用反引号(MySQL)或双引号(PostgreSQL/SQL Server)包裹,避免语法错误。

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

用用户变量逐行对比并更新,实现需求:

SELECT 
    CASE 
        WHEN @prev_group = `group` THEN '' 
        ELSE @prev_group := `group` 
    END AS `group`,
    account,
    description,
    balance,
    balance1
FROM your_table_name, (SELECT @prev_group := NULL) AS init_var;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:25:18