结合两个SQL查询,一个涉及GROUP BY?

时间:2013-10-30 13:49:43

标签: sql

我想将这两个SQL查询合并为一个。

SELECT COUNT() as total_grants, SUM("CURRENT_AWARD") as total_spent FROM t;
SELECT YEAR, COUNT(), SUM('CURRENT_AWARD') FROM t GROUP BY YEAR AS by_year;

第一个查询显示授权总数和总支出。第二个是相同的,但是按年。

这可能吗?我已经在第一个查询中将两个查询合并为一个,但我无法弄清楚如何在第二个查询中正确使用AS子句。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如何使用CROSS JOIN

SELECT  YEAR, 
        COUNT(*), 
        SUM('CURRENT_AWARD') ,
        t2.total_grants,
        t2.total_spent
FROM    t 
        CROSS JOIN
        (
            SELECT  COUNT(*) as total_grants, 
                    SUM("CURRENT_AWARD") as total_spent 
            FROM    t
        ) t2
GROUP   BY YEAR;

答案 1 :(得分:0)

也许是这样的?

SELECT BY_YEAR, COUNT(), SUM('CURRENT_AWARD') FROM t GROUP BY rollup(by_year);

(我认为汇总可以是rdbms /版本依赖...)

答案 2 :(得分:0)

试试这个。

SELECT YEAR, COUNT(*) as total_grants, SUM(CURRENT_AWARD) as total_spent 
FROM t
GROUP BY YEAR;

COUNT(*)会计算表t中的所有行,包括NULL的行。如果要忽略NULL行,请计算特定列。例如,COUNT(CURRENT_AWARD)

您不需要CURRENT_AWARD周围的引号,因为此标识符仅包含字母和下划线。