SQL使用GROUP BY聚合最频繁的值

问题描述 投票:0回答:1

我有这样一张桌子:

PARTNUMBER | QUANTITY | DESCRIPTION
'foo'        2          'a'
'foo'        2          'a1'
'bar'        2          'b'
'bar'        2          'b'
'bar'        2          'b1'
'bizz'       2          'c'

我正在尝试按PARTNUMBER分组,按QUANTITY进行汇总,并按最常见的出现来汇总Description。

[我尝试使用子查询来按描述最频繁发生的方式来对DESCRIPTION进行汇总,但是我在正确使用它时遇到了一些麻烦,尤其是对于GROUP BY。

这里是我所拥有的:

SELECT SUM(QUANTITY) AS QUANTITY, PARTNNUMBER, 
    (SELECT TOP(1) [DESCRIPTION]
    FROM [PBJobDB].[dbo].[DEVICES]
    /*WHERE DESCRIPTION = t1.PARTNO ?? */
    GROUP BY [DESCRIPTION], PARTNNUMBER
    ORDER BY COUNT([DESCRIPTION]) DESC) as [DESCRIPTION]
FROM `database.table`
GROUP BY PARTNUMBER, [DESCRIPTION]

子查询没有通过PARTNUMBER获得最频繁的DESCRIPTION,而是给出了整个表中最频繁的DESCRIPTION。

我希望输出看起来像这样:

PARTNUMBER | QUANTITY | DESCRIPTION
'foo'        4          'a'
'bar'        6          'b'
'bizz'       2          'c'
sql sql-server
1个回答
0
投票

这就是最终为我工作的原因...

select distinct t1.PARTNUMBER , sum(t1.QUANTITY) AS QUANTITY, (
    select TOP(1) [DESCRIPTION]
    from [PBJobDB].[dbo].[DEVICES] AS t2
    where t2.PARTNUMBER = t1.PARTNUMBER 
    group by [DESCRIPTION]
    order by count(*) desc ) as [DESCRIPTION] 
from `database.table` AS t1 
/* WHERE `column` IS NULL AND `other_column` = 'some_value' */ 
GROUP BY t1.PARTNUMBER
© www.soinside.com 2019 - 2024. All rights reserved.