SQL查询从单个表中查找不同列和总计的小计?

时间:2016-01-10 05:55:28

标签: mysql sql-server

我有一张桌子,其中有3列

ID  Amount  District
1   100     A
2   500     B
1   250     A
2   240     B
1   100     A

现在我要显示不同地区和总计的小计。请指导我如何编写我的SQL查询。

我想将输出显示为 -

District  Subtotal  Grand Total
A          450
B          740        1190

3 个答案:

答案 0 :(得分:0)

您可以使用the SUM function获取总计,例如:

SELECT SUM(Amount) FROM data;

这将返回包含单个数字的单行,即整个表格中所有Amount的总和。

要获得每个区域的总数,请将SUMa GROUP BY clause合并:

SELECT SUM(Amount), District FROM data GROUP BY District;

这将返回一个表格,每个区域包含一行,包含该区域的总计。

答案 1 :(得分:0)

如果您想要此格式的数据,可以尝试使用以下代码:

SELECT District As 'District', SUM(Amount) as 'Total' 
FROM tbl 
GROUP BY District
UNION
SELECT 'Grand Total', sum(Amount) 
FROM tbl

答案 2 :(得分:0)

声明样本表并插入一些数据

DECLARE @tbl TABLE (ID INT, Amount INT, District CHAR(1))

INSERT @tbl
SELECT 1, 100, 'A' UNION ALL
SELECT 2, 500, 'B' UNION ALL
SELECT 1, 250, 'A' UNION ALL
SELECT 2, 240, 'B' UNION ALL
SELECT 1, 100, 'A'

查询

SELECT DISTINCT t.District, 
       CASE WHEN ID = (SELECT TOP 1 ID FROM @tbl 
                       WHERE District = t.District
                       ORDER BY ID DESC)
            THEN (SELECT SUM(Amount) 
                  FROM @tbl
                  WHERE ID <= t.ID
                  AND District = t.District)
            ELSE ' ' END AS [Subtotal],
       CASE WHEN ID = (SELECT TOP 1 ID FROM @tbl 
                       ORDER BY District DESC)
            THEN (SELECT SUM(Amount) 
                  FROM @tbl) 
            ELSE ' ' END AS [Grand Total]
FROM @tbl AS t

你可以为MySQL做同样的事情,但不是使用TOP,而是需要使用LIMIT