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

如何在SELECT多列时指定单列应用DISTINCT?附实操示例

解决方法:查询全列并对指定列应用去重/筛选逻辑

看起来你需要查询所有6列数据,同时对指定列(结合你的期望输出,应该是Column4)做特殊处理,还要格式化Column2和Column3的数值格式。下面分两种常见场景给出解决方案:

场景1:保留指定列某一唯一值的所有行(匹配你的期望输出)

从你的期望结果来看,你想要保留Column4值为001的所有行,同时把Column2和Column3转为6位小数格式。这种情况用WHERE筛选+数值格式化就能实现,不同数据库的语法略有差异:

MySQL 版本

SELECT
    Column1,
    ROUND(Column2, 6) AS Column2,
    ROUND(Column3, 6) AS Column3,
    Column4,
    Column5,
    Column6
FROM your_table
WHERE Column4 = '001';

PostgreSQL 版本

SELECT
    Column1,
    TO_CHAR(Column2::numeric, 'FM999999.000000') AS Column2,
    TO_CHAR(Column3::numeric, 'FM999999.000000') AS Column3,
    Column4,
    Column5,
    Column6
FROM your_table
WHERE Column4 = '001';

SQL Server 版本

SELECT
    Column1,
    FORMAT(Column2, 'N6') AS Column2,
    FORMAT(Column3, 'N6') AS Column3,
    Column4,
    Column5,
    Column6
FROM your_table
WHERE Column4 = '001';

执行后就能得到你想要的结果:仅包含Column4为001的行,且Column2、Column3显示为6位小数格式。

场景2:对指定列全局去重(每个唯一值仅返回一行)

如果你的真实需求是对指定列(比如Column4)去重,即结果中该列每个值只出现一次,同时返回对应其他列的数据,可以用窗口函数或者数据库特定语法:

PostgreSQL 专属语法(简洁高效)

SELECT DISTINCT ON (Column4)
    Column1,
    TO_CHAR(Column2::numeric, 'FM999999.000000') AS Column2,
    TO_CHAR(Column3::numeric, 'FM999999.000000') AS Column3,
    Column4,
    Column5,
    Column6
FROM your_table
ORDER BY Column4;

通用SQL(所有数据库支持)

用窗口函数ROW_NUMBER()实现,能自定义取每个分组的哪一行:

SELECT
    Column1,
    FORMAT(Column2, 6) AS Column2,
    FORMAT(Column3, 6) AS Column3,
    Column4,
    Column5,
    Column6
FROM (
    SELECT *,
           -- 按Column4分组,每组按Column1排序取第一行
           ROW_NUMBER() OVER (PARTITION BY Column4 ORDER BY Column1) AS row_num
    FROM your_table
) t
WHERE row_num = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:39