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

如何在SQL中基于transaction列删除表内重复数据?

基于transaction列去除employee表重复数据的SQL解决方案

我有一张名为employee的数据表,表结构为(id, transaction, sales),具体数据如下:

id                  transaction             sales
1100000000002493644 46414104026581005688    2.2400
1100000000003120288 46403360812820035967    2.2400
1100000000002493644 46414104026581005688    2.2400
3300000000002592894 46427351011280903808    2.2400
1100000000108772072 46498465013410865589    3.9800
1100000000002493644 46498465013410865909    3.2900

需求与问题

需要基于transaction列删除重复数据,尝试了以下SQL代码但未得到正确结果:

SELECT employee.*, DISTINCT(transaction) AS UNIQUE_TXN
FROM employee AS employee
INNER employee AS employee_1
    ON employee.transaction= employee_1.transaction
GROUP BY employee.*

期望输出如下:

id                  transaction             sales
1100000000002493644 46414104026581005688    2.2400
1100000000003120288 46403360812820035967    2.2400
3300000000002592894 46427351011280903808    2.2400
1100000000108772072 46498465013410865589    3.9800
1100000000002493644 46498465013410865909    3.2900

原SQL的问题

  1. 语法错误:INNER employee缺少JOIN关键字,正确写法应为INNER JOIN employee
  2. 逻辑冗余:无需通过自连接实现去重,写法复杂且效率低
  3. 函数误用:DISTINCT是对整个查询结果去重,不能单独作用于单个字段,DISTINCT(transaction)写法无意义

解决方案

方法1:使用DISTINCT直接去重

如果同一transaction对应的id和sales完全一致,直接用DISTINCT即可快速去重:

SELECT DISTINCT id, transaction, sales
FROM employee;

方法2:使用窗口函数(适用于同一transaction存在不同id/sales的场景)

如果需要保留重复transaction中的某一行(例如最小id的记录),可以用ROW_NUMBER()窗口函数:

SELECT id, transaction, sales
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY transaction ORDER BY id) AS rn
    FROM employee
) t
WHERE rn = 1;
  • PARTITION BY transaction:按交易号分组
  • ORDER BY id:指定分组内的排序规则,这里选择保留id最小的记录,可根据需求修改为其他字段(如sales)
  • 筛选rn = 1即可得到每组的第一条记录,实现去重

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:35