Mysql SQL查询:SUM()+;分组依据+;条件
下表是我需要的输出,它为我提供了所有列的group by date1,其中包含特定日期的工资总额(>6000)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
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的查询吗?尽管此代码可能会回答此问题,但提供有关为什么和/或如何回答此问题的其他上下文将显著提高其长期价值。请在回答中添加说明。请在问题上加上正确的标记。