首頁 >資料庫 >mysql教程 >為什麼我的 SQL 查詢會產生「不是單組組函數」錯誤?

為什麼我的 SQL 查詢會產生「不是單組組函數」錯誤?

DDD
DDD原創
2024-12-23 16:30:17742瀏覽

Why Does My SQL Query Produce a

理解SQL 中的「不是單組組函數」錯誤

在SQL 中,單組組函數,例如MAX()、 SUM() 或AVG() 會套用於指定分組列中具有相同值的一組行。但是,如果您嘗試將各個清單達式與群組函數一起包含在 SELECT 清單中,並且不在 GROUP BY 子句中包含所有這些表達式,您將遇到「不是單組組函數」錯誤。

問題說明

在範例SQL 語句中,您提供:

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN

查詢嘗試計算每個唯一SSN 的TIME 總和的最大值,然後傳回與該最大值關聯的SSN。但是,此查詢有一個基本問題:

  • 表達式 MAX(SUM(TIME)) 是一個單組組函數,用於計算每個 SSN 的 TIME 的最大總和。根據定義,這意味著每個 SSN 只有一個結果。
  • 在 SELECT 清單中包含單一清單達式 SSN 違反了 SELECT 清單中包含的所有單一清單達式也必須包含在GROUP BY 子句。

解決方案

解決此問題錯誤,您有三個選項:

  • 從SELECT 清單中刪除單一清單達式(SSN): 這將為您提供沒有關聯SSN 的最大TIME總和。
  • 將單一清單達式 (SSN) 新增至 GROUP BY 子句: 這會將結果分組SSN 和 TIME,讓您擷取與 TIME 的最大總和關聯的 SSN。
  • 使用子查詢: 您可以使用子查詢來擷取 TIME 的最大總和,然後使用在單獨的查詢中使用該值來識別關聯的 SSN。

使用選項的範例查詢2

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN, TIME

此查詢將按SSN 和TIME 將結果分組,讓您與每個SSN 的擷取最大TIME 總和關聯的SSN。

以上是為什麼我的 SQL 查詢會產生「不是單組組函數」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn