SQL QUERY:SUM()+ Group BY + Condition

时间:2016-06-09 09:39:16

标签: mysql sql sql-server

下面是表格,我需要输出,它为我提供了按日期分组的所有列,其中包含特定日期的工资总额(> 6000)。

source table ( INput table ) :
id   name     date1        salary 
1 JOHNSON   1990-12-17    1800 
2 HARDING   1990-12-17    5200 
3 TAFT      1990-12-17    2500 
4 HOOVER    1990-04-02    2700 
5 LINCOLN   1990-04-02    2250 
6 GARFIELD  1990-04-02    5400 
7 POLK      1997-09-22    2500 
8 GRANT     1997-09-22    320 

所需的输出表(下方):(最后2条7,8不存在)

id   name     date1        salary   sum(salary)
1 JOHNSON   1990-12-17    1800        9500
2 HARDING   1990-12-17    5200        9500
3 TAFT      1990-12-17    2500        9500
                     ----------
4 HOOVER    1990-04-02    2700        10350
5 LINCOLN   1990-04-02    2250        10350
6 GARFIELD  1990-04-02    5400        10350
                     -----------

(最后两个值不应该来,因为那个日期的薪水总和<6000)

3 个答案:

答案 0 :(得分:1)

Oracle安装程序

CREATE TABLE table_name (id, name, date1, salary ) AS
SELECT 1, 'JOHNSON',  DATE '1990-12-17', 1800 FROM DUAL UNION ALL
SELECT 2, 'HARDING',  DATE '1990-12-17', 5200 FROM DUAL UNION ALL
SELECT 3, 'TAFT',     DATE '1990-12-17', 2500 FROM DUAL UNION ALL
SELECT 4, 'HOOVER',   DATE '1990-04-02', 2700 FROM DUAL UNION ALL
SELECT 5, 'LINCOLN',  DATE '1990-04-02', 2250 FROM DUAL UNION ALL
SELECT 6, 'GARFIELD', DATE '1990-04-02', 5400 FROM DUAL UNION ALL 
SELECT 7, 'POLK',     DATE '1997-09-22', 2500 FROM DUAL UNION ALL 
SELECT 8, 'GRANT',    DATE '1997-09-22',  320 FROM DUAL;

<强>查询

SELECT *
FROM   (
  SELECT t.*,
         SUM( salary ) OVER ( PARTITION BY date1 ) AS sum_salary
  FROM   table_name t
)
WHERE   sum_salary >= 6000;

<强>输出

        ID NAME     DATE1                   SALARY SUM_SALARY
---------- -------- ------------------- ---------- ----------
         4 HOOVER   1990-04-02 00:00:00       2700      10350 
         6 GARFIELD 1990-04-02 00:00:00       5400      10350 
         5 LINCOLN  1990-04-02 00:00:00       2250      10350 
         3 TAFT     1990-12-17 00:00:00       2500       9500 
         2 HARDING  1990-12-17 00:00:00       5200       9500 
         1 JOHNSON  1990-12-17 00:00:00       1800       9500 

答案 1 :(得分:0)

select * from
(
select id, name, 
sum(salary) over (partition by date1) sum_sal
from table_name
) where sum_sal >= 6000;

答案 2 :(得分:0)

以下查询将适用于sql server 2008和Mysql: -

select * from (
select a.id,a.name,a.date1,a.salary,
(select sum(salary) from table_name b where b.date1=a.date1) Sum_Salary
from
table_name a
) c 
where Sum_Salary >=6000
order by id

输出: -

id  name        date1       salary   Sum_Salary
1   JOHNSON   1990-12-17    1800.00  9500.00
2   HARDING   1990-12-17    5200.00  9500.00
3   TAFT      1990-12-17    2500.00  9500.00
4   HOOVER    1990-04-02    2700.00  10350.00
5   LINCOLN   1990-04-02    2250.00  10350.00
6   GARFIELD  1990-04-02    5400.00  10350.00
相关问题