SQL Server:聚合时,为特定列选择单行的值
Posted
技术标签:
【中文标题】SQL Server:聚合时,为特定列选择单行的值【英文标题】:SQL Server : when aggregating, select a single row's value for a specific column 【发布时间】:2018-02-08 18:21:20 【问题描述】:我的表中有三列,Contract_number
、Revenue
和 Cust_name
。我想SUM(Revenue)
同时按Contract_number
分组以获得该合同的总收入。在此旁边,我想显示Cust_name
以显示该合同下的客户。
问题是任何给定合约下都有多个Cust_name
值。合同下的Cust_name
值都非常相似,我不在乎使用哪一个,我只想显示其中一个。
如果我使用MIN(Cust_name)
之类的东西,我会丢失数据,如果我使用GROUP BY Cust_name
,那么这些值会被分成多行。
有没有办法为每个结果添加一个 Cust_name
值,同时保持 Contract_number
和 Revenue
聚合函数相同?
【问题讨论】:
使用 MAX(Cust_Name) 更像是三列而不是行 我认为您最好规范化您的表,为什么单个 Contract_Number 有很多类似的 Cust_Name? 【参考方案1】:将 MIN(Cust_Name) 或 MAX(Cust_Name) 与 SUM(Revenue) 一起使用,然后按 Contract_number 分组
SELECT Contract_number,
SUM(Revenue),
MIN(Cust_Name) -- or MAX(Cust_Name)
FROM table
GROUP BY Contract_number
【讨论】:
谢谢,这行得通。我的查询实际上也包含一个子查询。当我在子查询中使用 MIN 时,我丢失了结果,但是当我只放置主查询时,它工作得很好。谢谢你费迪南德!以上是关于SQL Server:聚合时,为特定列选择单行的值的主要内容,如果未能解决你的问题,请参考以下文章
在clickhouse中与max()聚合时如何连续选择相应的值?