假设我有这样的事情:
MySQL表
Date | Name | Val
22/11 | a | 1
22/11 | b | 2
22/11 | a | 3
22/11 | a | 4
23/11 | b | 1
23/11 | a | 2
23/11 | a | 3
23/11 | a | 5
我需要一个查询,在一列中,当Name ='a'时,每一天的值总和,以及所有值之和的另一列(每天也是如此)。
以我的例子,结果将是这样的:
Date | a.Total | Total
22/11 | 8 | 10
23/11 | 10 | 11
我试过这样的事情:
SELECT date, SUM(Val) AS a.Total, SUM(Val) AS Total FROM tbl1 Where Name = 'a'
关键是我需要指定一个WHERE子句来获取“a.total”值(WHERE Name ='a')但我不希望它被应用于获得总数。
我也尝试使用Left Join进行查询,但它没有用。
非常感谢任何帮助。
答案 0 :(得分:2)
您应该在第一个GROUP BY
CASE
和SUM()
SELECT date,
SUM( CASE WHEN Name='a'
THEN Val
ELSE 0
END) AS a_Total,
SUM(Val) AS Total
FROM tbl1
GROUP BY `Date`
答案 1 :(得分:1)
这是一种称为交叉表的问题(参见https://www.simple-talk.com/sql/t-sql-programming/creating-cross-tab-queries-and-pivot-tables-in-sql/)
您所使用的是使用CASE
语句,只有在满足条件时才能对值进行求和。
SELECT date, SUM(CASE WHEN Name='a' then Val end) AS a.Total, SUM(Val) AS Total FROM tbl1 GROUP BY date