Mysql SQL查询:SUM()+;分组依据+;条件

Mysql SQL查询:SUM()+;分组依据+;条件,mysql,sql,sql-server,Mysql,Sql,Sql Server,下表是我需要的输出,它为我提供了所有列的group by date1,其中包含特定日期的工资总额(>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

下表是我需要的输出,它为我提供了所有列的group by date1,其中包含特定日期的工资总额(>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不存在)


(最后两个值不应出现,因为该日期的工资总额<6000)

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 
查询

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 
输出

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 

以下查询将在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

你能给我查询一下sql server 2008和MySQL吗?@22dj如果你想查询其他数据库平台,也许你应该在你的问题后面加上相关的标签。并更新您的问题,以包括您的实际需求。您能为我提供sql server 2008和MySQL的查询吗?尽管此代码可能会回答此问题,但提供有关为什么和/或如何回答此问题的其他上下文将显著提高其长期价值。请在回答中添加说明。请在问题上加上正确的标记。