我有一张桌子,其中有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
答案 0 :(得分:0)
您可以使用the SUM
function获取总计,例如:
SELECT SUM(Amount) FROM data;
这将返回包含单个数字的单行,即整个表格中所有Amount
的总和。
要获得每个区域的总数,请将SUM
与a 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