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_NUMBER
或 DENSE_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
上测试
我希望在 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_NUMBER
或 DENSE_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
上测试