SELECT STATUS,
AVG(COUNT(CRIME_ID)) "Avg # of Crimes per Status"
FROM CRIMES
GROUP BY STATUS;
當我嘗試運行它時,我得到“不是按功能分組的單組”。如您所見,我已將非聚合列包含在 group by 串列中。當它從 SELECT 串列中洗掉時,它會運行,但我需要用它運行它。問題是什么?
uj5u.com熱心網友回復:
Oracle 實際上確實允許嵌套其早期版本中的兩個聚合函式,但這樣做意味著有兩個聚合,第一個帶有 GROUP BY 子句,但后面的一個 - 沒有。
這意味著我們無法選擇 GROUP BY 中的列 -
這就是錯誤的根源。
通過從子句中洗掉STATUS列,我們得到一個有效的查詢:SELECT
SELECT AVG(COUNT(CRIME_ID)) "Avg # of Crimes per Status"
FROM CRIMES
GROUP BY STATUS;
| 每個狀態的平均犯罪數量 |
|---|
| 3.33333333333333333333333333333333333333 |
小提琴
”你可以嵌套聚合函式。例如,下面的例子計算 scott 模式中所有部門的最高薪水的平均值:
SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id;平均(最高(工資))
`----------------
10925此計算評估由 GROUP BY 子句 (deptno) 定義的每個組的內部聚合 (MAX(sal)),并再次聚合結果。”
Oracle9i SQL 參考第 1 版 (9.0.1)
uj5u.com熱心網友回復:
在選擇組時,Oracle 不允許以這種方式嵌套兩個聚合函式。子查詢計數查詢,然后取平均值:
SELECT AVG(cnt)
FROM
(
SELECT STATUS, COUNT(CRIME_ID) AS cnt
FROM CRIMES
GROUP BY STATUS
) t;
請注意,您可以嘗試:
SELECT AVG(COUNT(CRIME_ID)) OVER () AS avg
FROM CRIMES
GROUP BY STATUS
ORDER BY STATUS
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
在這里,我們AVG()將結果集中所有組用作分析函式。然后,我們將輸出限制為一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435437.html
