简体   繁体   English

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

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

I am creating a query where it shows me the total per function per month but I am getting an error - not a GROUP BY expression.我正在创建一个查询,它显示每月每 function 的总数,但我收到一个错误 - 而不是 GROUP BY 表达式。

I have this in the select statement -我在 select 声明中有这个 -

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

Anything I can do to show the correct results?我能做些什么来显示正确的结果吗?

Do not use an analytic function, use the normal aggregation function instead:不要使用解析 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')

Which, for the sample data:其中,对于示例数据:

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;

Outputs:输出:

FUNCTION_NAME FUNCTION_NAME MONTH TOTAL_HOURS全部小时数
A一种 01-JAN-22 22 年 1 月 1 日 20 20
A一种 01-FEB-22 01-FEB-22 40 40
B 01-JAN-22 22 年 1 月 1 日 40 40
B 01-FEB-22 01-FEB-22 60 60

If you want a grant total for each function across all the months then nest the aggregation function inside the analytic function:如果您想要所有月份的每个 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')

Which outputs:哪些输出:

FUNCTION_NAME FUNCTION_NAME MONTH HOURS小时 TOTAL_HOURS全部小时数
A一种 01-JAN-22 22 年 1 月 1 日 20 20 60 60
A一种 01-FEB-22 01-FEB-22 40 40 60 60
B 01-JAN-22 22 年 1 月 1 日 40 40 100 100
B 01-FEB-22 01-FEB-22 60 60 100 100

db<>fiddle here db<> 在这里摆弄

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM