P粉1558329412023-08-24 13:38:21
如果您設定停用 ONLY_FULL_GROUP_BY
伺服器模式(預設情況下),您的查詢將在 MYSQL
中執行。但在本例中,您使用的是不同的 RDBMS。因此,為了使您的查詢正常運作,請將所有非聚合列新增至您的GROUP BY
子句中,例如
SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2
非聚合列意味著該列不會傳遞到聚合函數,例如 SUM
、MAX
#、COUNT
等。
P粉0900872282023-08-24 10:30:14
假設我有下表T
:
a b -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr
我執行以下查詢:
SELECT a, b FROM T GROUP BY a
輸出應有兩行,一行為 a=1
,第二行為 a=2
。
但是 b 的值應該在這兩行中顯示什麼呢?每種情況都有三種可能性,查詢中沒有任何內容明確說明為每組中的 b 選擇哪個值。意思很模糊。
這示範了單值規則,該規則禁止在執行GROUP BY 查詢時獲得未定義的結果,並且在選擇清單中包含不屬於分組的任何列標準,也不會出現在聚合函數(SUM、MIN、MAX 等)中。
修復它可能如下所示:
SELECT a, MAX(b) AS x FROM T GROUP BY a
現在很明顯您想要以下結果:
a x -------- 1 ghi 2 pqr