[英]Count occurrences of character in a string and Group By with SQL without group_concat
我嘗試計算發生次數並在之后添加分組
我的桌子:
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
問題表明實際問題更加復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.