我有以下SQL語句:聚集與GROUP BY
SELECT MODEL, COLOR, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL;
當我運行這個說法,我有一個錯誤信息,說「‘sales.color’必須出現在GROUP BY子句或使用一個聚合函數「
我不明白爲什麼COLOR必須出現在Group by中或在聚合函數中使用。
謝謝。
我有以下SQL語句:聚集與GROUP BY
SELECT MODEL, COLOR, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL;
當我運行這個說法,我有一個錯誤信息,說「‘sales.color’必須出現在GROUP BY子句或使用一個聚合函數「
我不明白爲什麼COLOR必須出現在Group by中或在聚合函數中使用。
謝謝。
顏色必須出現在組中,因爲您正在執行聚合選擇。這裏的問題基本上是它不知道用什麼行來總結銷售額。您可以選擇每種型號的銷售總額以及每種型號的顏色,因此,如果您想了解每種型號的銷售情況(無論顏色如何),或者要爲該組添加顏色,您需要從所選列中移除顏色如果你想知道每個模型的每種顏色的銷售量。
在第一種情況:
SELECT MODEL, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL;
在第二種情況:
SELECT MODEL, COLOR, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL,COLOR;
SELECT MODEL, COLOR, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL,COLOR;
這並不能解釋爲什麼* *。 – 2014-09-27 18:35:43
@JamesBinford我爲你的鏈接添加了我的鏈接 – 2014-09-27 18:39:22
+1,先生。 – 2014-09-27 23:09:23
這是GROUPBY的規則:
規則1:如果選擇塊確實有一個GROUP BY子句,SELECT子句中必須專門指定的任何 柱規格 作爲聚合函數的參數出現,或者在GROUP BY子句中給出的列的列表中或 中出現。
有更多在這裏:http://www.informit.com/articles/article.aspx?p=664143&seqNum=6
用途:
GROUP BY MODEL,COLOR
既然你問到的用於查詢模型和色域以及基於你必須GROUP這兩個領域的銷售將聚集使用這兩個字段的聚合
謝謝你的解釋。看來,group by指定了聚合的行,而不是select中的那些列。我的理解是否正確? – Lemon 2014-09-27 18:49:37
是羣組將按照給定列的值將所有行「分組」在一起。如果按MODEL進行分組,則會將所有具有相同MODEL的行組合在一起。 – krobertson 2014-09-27 18:55:39
類似的問題在這裏:[列的原因在選擇列表無效,因爲它不包含在聚合函數或GROUP BY子句](http://stackoverflow.com/questions/13999817/reason-for-column-是,無效的,在最選擇列表,因爲,它 - 是 - 不包含式-E〜LQ = 1)。所選的答案舉了一個例子。 – krobertson 2014-09-27 19:09:14