我有一个选择:
select deptno,12*month+year,salvalue
from career join salary on career.empno = salary.empno
and startdate<=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
and (
enddate>=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
or enddate is null
)
它的结果是:
+---------+----------------+----------+
| deptno | 12*month+year | salvalue |
+---------+----------------+----------+
| 30 | 2067 | 3601 |
| 30 | 2091 | 3671 |
| 30 | 2091 | 3531 |
| 40 | 2032 | 1938 |
| 40 | 2044 | 1988 |
| 10 | 2106 | 8117 |
| 10 | 2118 | 8117 |
| 10 | 2130 | 8217 |
+---------+----------------+----------+
我需要得到deptno,其中最大12 *月+年的salvalues总和最大。 在这张表中,deptno是10:
deptno = 30 max(12个月+年)= 2091 sum(salvalue)= 3671 + 3531 = 7202
deptno = 40 max(12个月+年)= 2044 sum(salvalue)= 1988
deptno = 10 max(12个月+年)= 2130 sum(salvalue)= 8217
答案 0 :(得分:0)
您可以在deptno
的外部查询分组中执行此操作。像
SELECT deptno
FROM
(
select deptno,
12*month+year as computed_column,
salvalue
from career join salary on career.empno = salary.empno
and startdate<=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
and (
enddate>=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
or enddate is null
)
) tab
GROUP BY deptno
HAVING SUM(salvalue) = MAX(computed_column);
答案 1 :(得分:0)
您可以尝试
WITH
MaxSalarySum AS (
SELECT
deptNo
, twelveMonthsPlusYear
, SUM(salValue) salValueSum
FROM (
select deptno, 12*month+year twelveMonthsPlusYear, salvalue
from career join salary on career.empno = salary.empno
and startdate<=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
and (
enddate>=to_date('01-'||to_CHAR(month)||'-'||to_CHAR(year),'dd-mm-yyyy')
or enddate is null
)
)
GROUP BY deptNo, twelveMonthsPlusYear
)
SELECT
deptNo
FROM MaxSalarySum
WHERE salValueSum = (SELECT MAX(salValueSum) FROM MaxSalarySum)
;
不是特别优雅 - 但相当通用。 请参阅(基于中间结果)实际操作:SQL Fiddle
请评论是否需要调整/更多细节。