了解沒有聚合函數的GROUP BY
在SQL 中,GROUP BY 語句用於根據指定列對表中的行進行分組。在不使用聚合函數的情況下使用 GROUP BY 時,了解它的操作方式及其所需的條件非常重要。
考慮以下範例:
SELECT ename, sal FROM emp GROUP BY ename, sal;
此查詢不會傳回任何行,因為它違反了沒有聚合函數的GROUP BY 的規則:
在這種情況下,SELECT 清單有兩列(ename、sal) ,但 GROUP BY 子句有三個(ename、sal、sal)。若要修正此問題,請從GROUP BY 子句中刪除一個sal 欄位:
SELECT ename, sal FROM emp GROUP BY ename;
當您在 SELECT 清單中包含 sal 時,它會變成非 GROUP BY 資料列,因為它不在 GROUP BY 子句中。由於它不是聚合函數,因此會觸發 ORA-00979 錯誤。
修正此問題需要將sal 加到GROUP BY 子句或在其上使用聚合函數:
-- Add sal to the GROUP BY clause SELECT ename, MIN(sal), MAX(sal) FROM emp GROUP BY ename, sal; -- Use an aggregate function on sal SELECT ename, SUM(sal) FROM emp GROUP BY ename;
規則背後的推理
GROUP BY 操作合併GROUP BY 列中具有相同值的行,為每個唯一的值集產生一行。在沒有聚合函數的 SELECT 清單中包含非 GROUP BY 欄位會產生歧義,因為不清楚如何為每個群組選擇代表值。
例如,如果您有一個包含 Name 和 Age 列的表,並且您 GROUP BY Name,每個名字的結果中應顯示哪個年齡?透過使用 MIN、MAX 或 SUM 等聚合函數,您可以明確指定如何處理此類列。
以上是SQL 的 GROUP BY 子句在沒有聚合函數的情況下如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!