聚集函數

聚集函數 (先前稱為直欄函數) 接受引數,並傳回單一純量值,這是一組類似值 (例如一組一或多列內的直欄中的那些值) 的評估結果。

聚集函數的引數是從表示式衍生的一組值。 表示式可以包括直欄,但不能包括 scalar-fullselect、另一個聚集函數或 XMLQUERY 或 XMLEXISTS 表示式 (SQLSTATE 42607)。 集合的範圍是群組或中間結果表格。

如果在查詢中指定 GROUP BY 子句,且 FROM、WHERE、GROUP BY 及 HAVING 子句的中間結果是空集,則不會套用聚集函數; 查詢結果是空集; SQLCODE 設為 +100; 且 SQLSTATE 設為 '02000'。

如果查詢中 指定 GROUP BY 子句,且 FROM、WHERE 及 HAVING 子句的中間結果是空集,則聚集函數會套用至空集。

例如,下列 SELECT 陳述式的結果是部門 D01: 中員工 JOBCODE 的相異值數:
   SELECT COUNT(DISTINCT JOBCODE)
     FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D01'

關鍵字 DISTINCT 不是視為函數的引數,而是在套用函數之前執行的作業規格。 如果指定 DISTINCT ,則會刪除重複值。 針對數值相等的十進位浮點數值解譯 DISTINCT 子句時,不會考量值中的有效位數數目。 例如,十進位浮點數字 123.00 與十進位浮點數字 123 不同。 從查詢傳回的數字表示法將是所發現的任何一種表示法 (例如, 123.00 或 123)。

如果隱含或明確指定 ALL ,則不會刪除重複值。

為了與其他 SQL 實作相容, UNIQUE 可以指定為聚集函數中 DISTINCT 的同義字。

表示式可以在聚集函數中使用。 例如:
   SELECT MAX(BONUS + 1000)
     INTO :TOP_SALESREP_BONUS
     FROM EMPLOYEE
     WHERE COMM > 5000

可以使用綱目名稱 (例如, SYSIBM.COUNT (*)) 來限定聚集函數。