gpt4 book ai didi

mysql - 如何按文本的第一个字母分组

转载 作者:可可西里 更新时间:2023-11-01 07:48:01 28 4
gpt4 key购买 nike

我在 MySQL 中有以下查询:

select val,count(val)
from ....
where ...
group by val

它给出:

val   count
CE3 4
CE5 1
A3 12
BRICK4 5
BRICK2 2

我只想显示每个首字母计数最高的行。这意味着所有以 A 开头的 val 都是一组,所有以 B 开头的 val 是另一组等等。 .

预期的结果是:

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

我该怎么做?

编辑:我想做的是在查询中创建一个临时列,它将代表该组,例如:

val   count  group
CE3 4 C
CE5 1 C
A3 12 A
BRICK4 5 B
BRICK2 2 B

然后搜索每组计数值最高的行。但我不确定这是最好的方法

最佳答案

尝试这样的事情:

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);

首先获取每个 valcount 并从该结果中获取按首字母分组的 MAXcount

更新:(感谢 Vamsi Prabhala 指出我的第一个解决方案不是最好的)

在获得每个 valcount 之后,我使用一个变量重做 ROW_NUMBER() 功能(来自 MS-SQL)并选择结果的第一行,按 first_lettercount desc

排序
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

关于mysql - 如何按文本的第一个字母分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908181/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com