gpt4 book ai didi

MYSQL 对每个字母使用多个 CASE REGEXP 作为表行,并且还允许对每个所述 REGEXPied 字母进行重复/重复计算

转载 作者:行者123 更新时间:2023-11-29 17:16:06 26 4
gpt4 key购买 nike

假设我在 MYSQL 中有以下简单表(表名:test)

id  letter
1 A
2 BC
3 AB
4 C
5 AC
6 BA
7 CAB
8 C

我的目标是创建另一个表,其中字母成为一列的行,另一列来计算字母的数量。这是我的 MYSQL 查询:

SELECT
(CASE WHEN letter REGEXP 'A' THEN 'A'
WHEN letter REGEXP 'B' THEN 'B'
WHEN letter REGEXP 'C' THEN 'C'
END) LETTER,
COUNT(letter) COUNT_OF_LETTER
FROM test
GROUP BY (CASE WHEN letter REGEXP 'A' THEN 'A'
WHEN letter REGEXP 'B' THEN 'B'
WHEN letter REGEXP 'C' THEN 'C'
END);

查询的输出是:

LETTER  COUNT_OF_LETTER
A 5
B 1
C 2

虽然 A 的计数正确,但 B 和 C 的计数不正确。对于表“test”中具有多个字母的条目,一旦被计为 A,就不会再次计入 B 和/或 C。B 也是如此 - 如果已计入 C,则跳过 C B.我的预期输出应该是这样的:

LETTER  COUNT_OF_LETTER
A 5
B 4
C 5

如果我只为每个单独的字母创建一个 CASE WHEN,它会正确地将 A 计为 5,B 计为 4,C 计为 5,但当像上面那样使用多个 WHEN 时则不会。

我已经在周围搜索了类似的内容,但它并没有解决此类问题。不管怎样,谢谢你在这件事上帮助我。

问候,沙希兰。

最佳答案

示例数据:

create table tbl(id int, letters varchar(5));
insert into tbl values
(1, 'A'),
(2, 'BC'),
(3, 'AB'),
(4, 'C'),
(5, 'AC'),
(6, 'BA'),
(7, 'CAB'),
(8, 'C');

试试这个:

select 'A' letter, sum(length(letters) - length(replace(letters, 'A', ''))) occurences from tbl
union all
select 'B', sum(length(letters) - length(replace(letters, 'B', ''))) from tbl
union all
select 'C', sum(length(letters) - length(replace(letters, 'C', ''))) from tbl

但我更喜欢这种方式:

select sum(length(letters) - length(replace(letters, 'A', ''))) A,
sum(length(letters) - length(replace(letters, 'B', ''))) B,
sum(length(letters) - length(replace(letters, 'C', ''))) C
from tbl

关于MYSQL 对每个字母使用多个 CASE REGEXP 作为表行,并且还允许对每个所述 REGEXPied 字母进行重复/重复计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613178/

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