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

SQL去重查询:应使用DISTINCT、窗口函数还是GROUP BY?

单字段去重的SQL方案对比

针对你从unitactuals.unitserials表中获取去重item_id的需求,直接说结论:现有用DISTINCT的写法已经很简便,下面给你分析三种方案的适用场景:

1. 现有DISTINCT写法

你的当前语句完全没问题,单字段去重用SELECT DISTINCT语法最直观,数据库优化器能高效处理这种场景,不需要额外折腾。

2. GROUP BY替代方案

也可以用GROUP BY实现相同效果,写法如下:

select
    itemid item_id
from
    unitactuals.unitserials
where
    mfgdate > $begin_date_range
    and mfgdate < $end_date_range
    and siteid = $site_id
    and serial like ($serial_prefix || '%')
group by itemid

性能上和DISTINCT几乎没差别,优化器会生成类似的执行计划。如果之后你需要对每个item_id做聚合统计(比如计数、求和),GROUP BY会更灵活;但单纯去重的话,两种写法任选其一就行,看你习惯。

3. 窗口函数完全没必要

窗口函数(比如ROW_NUMBER()这类)是用来处理复杂分组排序、行级计算的,用它来做单纯的单字段去重纯属画蛇添足,会让语句变复杂,还可能带来不必要的性能损耗,完全不推荐。

最终建议

单纯单字段去重,DISTINCT和GROUP BY都是正确且简便的方案,你现在的DISTINCT写法已经足够好,不用改。窗口函数就别考虑了,完全不适合这个场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:20:29