我在MySQL中有以下查询:
select val,count(val)
from ....
where ...
group by val
Run Code Online (Sandbox Code Playgroud)
它给:
val count
CE3 4
CE5 1
A3 12
BRICK4 5
BRICK2 2
Run Code Online (Sandbox Code Playgroud)
我想只显示每个首字母数最多的行.这意味着所有val开始A都是一组,所有val开始B都是另一组等...
预期的结果是:
val count
CE3 4 / CE3 CE5 are in group C , CE3 has higher count
A3 12 / A3 is the only one in group A
BRICK4 5 / BRICK4 BRICK2 are in group B, BRICK4 has higher count
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
编辑: 我想要做的是在查询中创建一个临时列,代表组如下:
val count group
CE3 4 C
CE5 1 C
A3 12 A
BRICK4 5 B
BRICK2 2 B
Run Code Online (Sandbox Code Playgroud)
然后搜索每组具有最高计数值的行.但我不确定这是最好的方法
尝试这样的事情:
select
val
,MAX(count) as count
,left(val,1) as first_letter
from (
select
val
,count(val) as count
from tbl
group by val
) a
group by left(val, 1);
Run Code Online (Sandbox Code Playgroud)
首先得到count每个val和从这个结果得到MAX第一个字母的计数分组
更新 :(请向Vamsi Prabhala指出我的第一个解决方案不是最好的解决方案)
获得countper之后val,我使用一个变量来重做ROW_NUMBER()功能(来自MS-SQL)并从结果中选择第一行,按顺序排序first_letter和countdesc
select val, count, first_letter from (
select
@i:=CASE
WHEN @first_letter = first_letter THEN @i + 1
ELSE 1
END as rn
,@first_letter:= a.first_letter as First_letter
,a.val
,a.count
from (
select
val
,count(val) as count
,left(val,1) as first_letter
from tbl
group by val
)a, (select @i:=0) b
order by First_letter, count desc
) c
where rn = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |