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

SQL中如何在ROUND函数相关逻辑内使用DISTINCT实现列值去重

SQL列去重实现方案

核心思路是将去重逻辑前置到数据读取阶段,和后续的计算逻辑完全拆分,既不会破坏原有case的返回结果,也不需要在cast内部嵌套子查询。

方案1:CTE提前去重(推荐)

兼容大多数支持CTE语法的数据库(MySQL 8.0+、SQL Server、PostgreSQL、Oracle等)

WITH distinct_source AS (
    -- 提前对关联判断字段、计算字段做去重
    SELECT DISTINCT x, y, value 
    FROM 你的业务表名
    -- 可在此处提前添加业务过滤条件,减少数据计算量
)
SELECT 
    ISNULL(
        CASE WHEN x = y 
            THEN CAST(ISNULL(ROUND(value, 0), 0) AS INT)
            ELSE 1 
        END, 
    0) AS target_column
FROM distinct_source

方案2:派生表去重

适用于不支持CTE的低版本数据库

SELECT 
    ISNULL(
        CASE WHEN x = y 
            THEN CAST(ISNULL(ROUND(value, 0), 0) AS INT)
            ELSE 1 
        END, 
    0) AS target_column
FROM (
    SELECT DISTINCT x, y, value 
    FROM 你的业务表名
) AS distinct_t
  • 若去重需要关联其他业务字段,直接将对应字段添加到DISTINCT后的字段列表中即可,不会影响原有case的计算逻辑。

内容的提问来源于stack exchange,提问作者Sree Lakshmi K M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:54:05