簡體   English   中英

不是 GROUP BY 表達式 - OVER(PARTITION BY)

[英]Not a GROUP BY expression - OVER(PARTITION BY)

我正在創建一個查詢,它顯示每月每 function 的總數,但我收到一個錯誤 - 而不是 GROUP BY 表達式。

我在 select 聲明中有這個 -

sum(a.sched_hours) OVER(PARTITION BY d.function) AS total_hours

我能做些什么來顯示正確的結果嗎?

不要使用解析 function,而是使用普通聚合 function:

SELECT function_name,
       TRUNC(dt, 'MM') AS month,
       SUM(sched_hours) AS total_hours
FROM   table_name
GROUP BY
       function_name,
       TRUNC(dt, 'MM')

其中,對於示例數據:

CREATE TABLE table_name (function_name, dt, sched_hours) AS
SELECT 'A', DATE '2022-01-01', 10 FROM DUAL UNION ALL
SELECT 'A', DATE '2022-01-02', 10 FROM DUAL UNION ALL
SELECT 'A', DATE '2022-02-01', 20 FROM DUAL UNION ALL
SELECT 'A', DATE '2022-02-02', 20 FROM DUAL UNION ALL
SELECT 'B', DATE '2022-01-01', 20 FROM DUAL UNION ALL
SELECT 'B', DATE '2022-01-02', 20 FROM DUAL UNION ALL
SELECT 'B', DATE '2022-02-01', 30 FROM DUAL UNION ALL
SELECT 'B', DATE '2022-02-02', 30 FROM DUAL;

輸出:

FUNCTION_NAME 全部小時數
一種 22 年 1 月 1 日 20
一種 01-FEB-22 40
22 年 1 月 1 日 40
01-FEB-22 60

如果您想要所有月份的每個 function 的贈款總額,則將聚合 function 嵌套在分析 function 中:

SELECT function_name,
       TRUNC(dt, 'MM') AS month,
       SUM(sched_hours) AS hours,
       SUM(SUM(sched_hours)) OVER (PARTITION BY function_name) AS total_hours
FROM   table_name
GROUP BY
       function_name,
       TRUNC(dt, 'MM')

哪些輸出:

FUNCTION_NAME 小時 全部小時數
一種 22 年 1 月 1 日 20 60
一種 01-FEB-22 40 60
22 年 1 月 1 日 40 100
01-FEB-22 60 100

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM