MS SQL 中的非聚合字段

Posted

技术标签:

【中文标题】MS SQL 中的非聚合字段【英文标题】:Non Aggregate fields in MS SQL 【发布时间】:2021-04-12 23:10:43 【问题描述】:

我有 MS SQL 服务器表,其中包含如下数据

id  val1    val2  
1   100.00  50.00
2   25.00   30.00
3   30.00   25.00
4   100.00  50.00
5   40.00   80.00
6   25.00   30.00
7   80.00   21.00
8   25.00   30.00

在上表中,很少有 val1 val2 值组合出现超过一个,即 100.00 50.00 出现两次,25.00 30.00 出现三次。同样,如果任何组合出现多个,我将需要获取这些 ID。 所以我的结果是 id - 1,2,4,6,8。 请帮助如何在 MS SQL 中查询。谢谢

【问题讨论】:

id字段不在聚合函数或group by子句中报错 【参考方案1】:

CTE 获得不止一次出现的val1, val2 对。我们加入表格以获取id 值:

;with cte as (
   select val1, val2 
   from t 
   group by val1, val2 
   having count(*) > 1
)
select id
from t
join cte on t.val1 = cte.val1 and t.val2 = cte.val2

【讨论】:

以上是关于MS SQL 中的非聚合字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Teradata SQL 中使用 LEFT JOIN 对查询中的非聚合参数进行 GROUP BY?

在SQL中的聚合函数

SQL Server中的聚合函数都有哪些?

SQL Server中的聚合函数都有哪些?

sql MS SQL简单聚合

sql MS SQL数据聚合 - NTILE