理解SQL 分組函數:解決「不是單組分組函數」錯誤
在SQL 中,分組函數如SUM( ) 聚合多行中的值,並按特定列對它們進行分組。但是,當嘗試在 SELECT 語句中將群組函數與單一清單達式組合時,會出現「不是單組組函數」錯誤。當群組函數對與單一清單達式相同的群組中的資料子集進行操作時,會出現此錯誤。
要解決此問題,請考慮以下選項:
1 。刪除群組函數:
刪除 SUM() 函數會使聚合值無效,只保留單一清單達式。
2.刪除單一清單運算式:
從 SELECT 語句中刪除 SSN 欄位將透過傳回最大求和值來解決錯誤。
3.新增綜合GROUP BY 子句:
在GROUP BY 子句中包含所有單獨的清單達式可確保每一行屬於一個不同的群組,與組函數的範圍相符。但是,如果您打算按多個列進行分組並且每個組合都有唯一值,則此選項可能不適合。
用於檢索的替代查詢:
對於給定為了查找下載次數最多的客戶的SSN,建議使用替代查詢:
SELECT TOP 1 SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN ORDER BY TotalTime DESC;
此查詢檢索SSN 和每個SSN 的總下載時間,依總時間降序排列。 TOP 1 子句將結果限制為總時間最長的 SSN。
或者,如果多個客戶共享相同的最大總時間,則可以使用以下查詢:
SELECT SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN HAVING SUM(TIME) = (SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN);
此修改後的查詢檢索與最大總下載時間相關的所有SSN,確保不會遺失任何資訊。
以上是如何解決SQL中「不是單組組函數」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!