SQL使用GROUP BY汇总最频繁的值

时间:2020-01-04 01:54:02

标签: sql sql-server

我有一个这样的表:

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'

3 个答案:

答案 0 :(得分:1)

我尝试过以下一种,请检查其是否对您有用,

SELECT PARTNUMBER,SUM(QUANTITY) AS QUANTITY,  
(
    SELECT TOP 1 DESCP FROM
        (SELECT [DESCRIPTION]'DESCP',COUNT(*)'CNT'
        FROM testtable
        WHERE PARTNUMBER = t1.PARTNUMBER
        GROUP BY [DESCRIPTION]) A 
    GROUP BY DESCP,CNT HAVING CNT=MAX(CNT) 
)as [DESCRIPTION]
FROM testtable  T1
GROUP BY PARTNUMBER

答案 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

答案 2 :(得分:0)

我将使用Sum()来获取总量。下面是为我工作的示例。

ConcreteProducts