gpt4 book ai didi

mysql - 使用没有 group_concat 的 SQL 计算字符串和 Group By 中字符的出现次数

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

我尝试计算出现次数并在之后添加分组

我的 table :

id | book | chapter | text
1 | 1 | 1 | 'hello hello world'
2 | 1 | 2 | 'hello hello hello hello'
3 | 1 | 3 | 'world'
4 | 1 | 4 | 'hello test'

我执行我的请求:

SELECT
book,
chapter,
group_concat(text) as text,
ROUND (
(
LENGTH(group_concat(text))
- LENGTH( REPLACE ( group_concat(text), "hello", "") )
) / LENGTH("hello")
) AS 'count'
FROM my_table
WHERE book=43
GROUP BY chapter, book

我想要这样的结果:

book | chapter | count
----------------------
43 | 1 | 2
43 | 2 | 4
43 | 3 | 0
43 | 4 | 1

成功了!

但我必须重新定义一个变量 group_concat_max_len :

SET SESSION group_concat_max_len = 1000000;

我的服务器是共享服务器,我没有权限(例如 SET GLOBAL)。

我想在没有 group_concat_max_len 的情况下执行另一个请求以获得相同的结果,你有什么想法吗?

最佳答案

我认为这会更简单,因为只是一个 SUM():

SELECT book, chapter,
SUM(LENGTH(REPLACE(text, 'hello', 'hellox')) - LENGTH(text)) as num_hellos
FROM my_table
WHERE book = 43
GROUP BY chapter, book;

如果您输出串联文本,您只需要处理 GROUP_CONCAT()

请注意,这种计算文本中“hello”数量的方法要简单得多。它用一个长一个字符的字符串替换字符串,然后简单地取长度差。如果您的字符串是 UTF-8 编码的,您应该确保附加字符是 1 个字节或使用 CHAR_LENGTH() 而不是 LENGTH()

编辑:

我还要注意,对于问题中的示例,不需要聚合,所以这就足够了:

SELECT book, chapter,
(LENGTH(REPLACE(text, 'hello', 'hellox')) - LENGTH(text)) as num_hellos
FROM my_table
WHERE book = 43;

但是,OP 的 group_concat_max_len 问题表明实际问题更为复杂。

关于mysql - 使用没有 group_concat 的 SQL 计算字符串和 Group By 中字符的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729727/

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