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

SQL中按ID分组后,如何判断Value列所有值是否全部相同

按分组判断所有值是否全部相同的SQL实现

咱们先来确认你的临时表结构和测试数据:

CREATE TABLE #Temp (ID int,Value char(1))
insert into #Temp (ID ,Value ) (
Select 1 ,'A' union all
Select 1 ,'W' union all
Select 1 ,'I' union all
Select 2 ,'I' union all
Select 2 ,'I' union all
Select 3 ,'A' union all
Select 3 ,'B' union all
Select 3 ,'1'
)

针对按ID分组后判断每组Value是否全部相同的需求,这里有两种简单高效的实现方式:

方法1:利用去重计数判断

通过COUNT(DISTINCT Value)统计分组内去重后的Value数量,如果结果等于1,说明所有值都相同;反之则存在不同值。

SELECT 
    ID,
    CASE WHEN COUNT(DISTINCT Value) = 1 THEN '全部相同' ELSE '存在不同值' END AS ValueStatus
FROM #Temp
GROUP BY ID

逻辑解释

  • 对于ID=1的分组,Value有'A'、'W'、'I'三种不同值,去重计数为3,所以返回"存在不同值"
  • 对于ID=2的分组,Value全是'I',去重计数为1,返回"全部相同"
  • 对于ID=3的分组,Value有'A'、'B'、'1'三种不同值,返回"存在不同值"

方法2:对比分组内的最小值和最大值

如果分组内所有Value相同,那么它的最小值和最大值必然相等;反之则不等。这种方法在大数据量场景下性能可能更优,因为可以避免去重操作的开销。

SELECT 
    ID,
    CASE WHEN MIN(Value) = MAX(Value) THEN '全部相同' ELSE '存在不同值' END AS ValueStatus
FROM #Temp
GROUP BY ID

逻辑解释

  • ID=2的分组中,MIN(Value)和MAX(Value)都是'I',二者相等,判定为全部相同
  • ID=1和ID=3的分组中,最小值和最大值不相等,判定为存在不同值

两种方法都能满足需求,你可以根据实际的数据量和数据库特性选择合适的方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:38