SQL 服务器:显示字符串多数

SQL Server: show string majority

我希望在 SQL SERVER 中进行查询,这将允许我在大多数情况下显示在一个分组中的字符串。不是数量,不是最大值,而是大多数情况下显示的字符串:

colA colB colC
A 10 ccc
A 20 aaa
A 35 bbb
A 25 aaa
A 10 aaa
B 15 ccc
B 15 bbb
B 30 bbb

Select sum(colB) 作为总数,?????????? 作为标签 从表 1 按colA分组

结果:

colA total lable
A 100 aaa
B 60 bbb

谢谢!

这是另一种方法

select t.ColA,
       sum(t.total) as ColB,
       max(s2.ColC)
from   ( select s.ColA,
                s.ColC,
                sum(ColB) as total,
                count(1) as numbers
         from   strings s
         group by s.ColA, s.ColC
       ) t  
  outer apply ( select top 1 
                       s.ColA,
                       s.ColC,
                       sum(ColB) as total,
                       count(1) as numbers
                from   strings s
                where  s.ColA = t.ColA 
                group by s.ColA, s.ColC
                order by 4 desc
            ) s2
group by t.ColA

试试这个 DBFiddle

最简单的方法是根据 ColA 和 ColC 的 COUNT 条记录计算 ROW_NUMBERDENSE_RANK

如果出现平局,DENSE_RANK = 1 可能显示超过 1 个顶部。

SELECT 
  ColA
, TotalColB AS Total
, ColC AS Lable
FROM
(
  SELECT ColA, ColC
  , TotalColB = SUM(SUM(ColB)) OVER (PARTITION BY ColA)
  , Rnk = DENSE_RANK() OVER (PARTITION BY ColA ORDER BY COUNT(*) DESC)
  FROM YourTable 
  GROUP BY ColA, ColC
) q
WHERE Rnk = 1
ORDER BY ColA;
ColA Total Lable
A 100 aaa
B 60 bbb

db<>fiddle here

上测试