2016-12-14 77 views
-2

編輯:這已被確定爲問題#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this is incompatible with sql_mode=only_full_group_byMySQL處理GROUP BY。獲得ONLY_FULL_GROUP_BY錯誤

這是不正確的可能重複,由於答案是改變全球的sql_mode設置。 MySQL的改變基於functional dependencies and returning arbitrary data

我的問題有很好的理由ONLY_FULL_GROUP_BY默認並回答給一個簡短而準確的解釋上的錯誤,以及如何使用更詳細的語句來規避它。閱讀

感謝,表如下:

+-----------+-------------+-----------+----------+-------+ 
| productID | productCode | name  | quantity | price | 
+-----------+-------------+-----------+----------+-------+ 
|  1001 | PEN   | Pen Red |  5000 | 1.23 | 
|  1002 | PEN   | Pen Blue |  8000 | 1.25 | 
|  1003 | PEN   | Pen Black |  2000 | 1.25 | 
|  1004 | PEC   | Pencil 2B | 10000 | 0.48 | 
|  1005 | PEC   | Pencil 2H |  8000 | 0.49 | 
+-----------+-------------+-----------+----------+-------+ 

所以,如果我運行命令:

SELECT * FROM products GROUP BY productCode; 

我收到以下錯誤:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'southwind.products.productID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

所以從我收集的內容是mysql documentation,因爲我的GROUP BY參數中有重複的值拋出錯誤,拒絕任意返回。我寧願不禁用這個,所以任何幫助瞭解我失蹤,使查詢工作非常感謝。

謝謝。

根據您的模式
+0

因此,您希望爲每個組返回哪個行,因爲每個productCode中沒有相同的行? – Mihai

回答

1

,你只是這樣做:

SELECT Max(price) FROM products GROUP BY productCode; 

你看到錯誤,因爲,當您通過PRODUCTCODE組就意味着前三記錄在一起,最後兩個一起來,因爲你已使用select *要顯示所有字段。所以問題是你有三個不同的productID不只是一個,如果你也想擁有它們,你需要像這樣使用GROUP_CONCAT()

SELECT GROUP_CONCAT(`productID ` separator ',') as ids , Max(price) FROM products GROUP BY productCode; 

因此,您將所有ID連接爲一個字符串。

0

找出如何克服錯誤。在上面的表中,productCode中有重複的值。當我向GROUP BY提出要求時,MySQL沒有給出顯式行來捕獲,因此會引發錯誤。它希望我在SELECT參數中告訴它究竟要抓取哪些列值。

現在用我的SELECT參數聚集函數如下:

SELECT COUNT(productID),productCode, MAX(name), MAX(quantity), MAX(price) FROM products GROUP BY productCode; 

我得到設定,結果如下:

+------------------+-------------+-----------+---------------+------------+ 
| COUNT(productID) | productCode | MAX(name) | MAX(quantity) | MAX(price) | 
+------------------+-------------+-----------+---------------+------------+ 
|    2 | PEC   | Pencil 2H |   10000 |  0.49 | 
|    3 | PEN   | Pen Red |   8000 |  1.25 | 
+------------------+-------------+-----------+---------------+------------+ 

要清楚這些並不是因爲它在表中實際行在productID中找到COUNT以給出每個唯一productCode「組」有多少行。它也在尋找列的最大值。

如果我想基於產品代碼,以獲得實際的唯一行,我可以用這兩個語句:

SELECT MIN(productID), productCode FROM products GROUP BY productCode; 
+----------------+-------------+ 
| MIN(productID) | productCode | 
+----------------+-------------+ 
|   1004 | PEC   | 
|   1001 | PEN   | 
+----------------+-------------+ 

則:

SELECT * FROM products WHERE productID = 1004 OR productID = 1001; 

給予我:

+-----------+-------------+-----------+----------+-------+ 
| productID | productCode | name  | quantity | price | 
+-----------+-------------+-----------+----------+-------+ 
|  1001 | PEN   | Pen Red |  5000 | 1.23 | 
|  1004 | PEC   | Pencil 2B | 10000 | 0.48 | 
+-----------+-------------+-----------+----------+-------+ 

所以你必須明確地談論其他專欄。如果有人想在評論中加入這個,請做。謝謝。

+0

對你有好處!看,我試圖幫助你,如果我沒有盡我的責任讓你滿意,我很抱歉,我看到的是重複我的答案。但我不在乎 –

+0

順便說一句,爲什麼你刪除你的評論我有聰明的答案!看起來這不是破壞性的! –