2017-03-09 71 views
0

我嘗試計數發生和之後添加組,但我有一個錯誤計數出現通過與SQL

SELECT列表是不是在GROUP BY子句中包含非聚集 列'bdd.my_table.text'在功能上依賴於GROUP BY子句中的 列;這是不符合 的sql_mode = only_full_group_by

我的表:

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, 
    text,  
    ROUND ( 
     (
      LENGTH(text) 
      - LENGTH(REPLACE (text, "hello", "")) 
     )/LENGTH("hello")   
    ) AS count  
FROM my_table 
WHERE book=43 
GROUP BY chapter 

我想這樣的結果:

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

我試圖添加這個befo再次請求刪除「only_full_group_by」,但我有同樣的問題

SET SESSION group_concat_max_len = 1000000; 
+0

要使用'組by'爲什麼,你應該告訴我們你期待什麼。如果你只是想解決這個問題,請刪除sql_mode中的'only_full_group_by'屬性。 – Blank

+0

我更新我的職務與resut –

回答

1

試試這個,連我還是不知道你到底想幹什麼至今,但嘗試一下。

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 
GROUP BY chapter, book 
+0

Thx!結果arn't正確的,例如,結果是5和這個請求我只有結果2 –

+0

@Forward我不知道爲什麼它不工作的時候,我們在小組通過選擇添加字段'text',並用它(或)長度/替換功能?爲什麼我們需要使用group_concat,如果多個文本找到正確的話,它將執行concat操作? – GrabNewTech

+0

我想你應該爲每一章都計算所有的「你好」。如果是這樣,當然,你不需要在'group by'中添加'text'。請參閱[***演示***](http://sqlfiddle.com/#!9/11beb/2)在sqlfiddle。 – Blank

0

SELECT列表中的所有列應呈現GROUP BY條款。所以,請加入GROUP BY條款(或)所有SELECT列表列SELECT列表,它是不是在GROUP BY條款刪除

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

THX的評論,但是當我添加GROUP BY書,章,文字,我有沒有GROUP BY –

+0

根據你的錯誤信息相同的結果,'text'場沒有出現在GROUP BY子句,並且您試圖執行一些聚合操作導致該問題。我希望上面的查詢可以解決你的問題。 – GrabNewTech

+0

您的文章,我也有同樣的消息:SELECT列表中的表達#3是不是在GROUP BY子句中包含非聚合列「bdd.my_table.text」,這並不功能依賴於在GROUP BY子句中的列;這與sql_mode = only_full_group_by不兼容,章節沒有被分組... –

0

如果我理解正確的話,你可能想是這樣的:

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

注意,COUNT()要簡單得多 - 沒有劃分。這將用一個字符長度替換hello,然後減去原始文本的長度。

+0

我有一個錯誤:你的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在'SUM(長度(替換(text,'hello','hellox')) - LENGTH(文本)')附近使用正確的語法作爲cnt –