SQL。获取值为MAX的SUM

时间:2014-12-21 17:13:18

标签: sql sum max

我有一个选择:

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

2 个答案:

答案 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

请评论是否需要调整/更多细节。

相关问题