使用MySQL多次选择同一列

时间:2013-11-29 14:31:30

标签: mysql sql select

假设我有这样的事情:

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进行查询,但它没有用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您应该在第一个GROUP BY

内使用CASESUM()
SELECT date, 
SUM( CASE WHEN Name='a'
          THEN Val
          ELSE 0
     END) AS a_Total, 
SUM(Val) AS Total 

FROM tbl1 
GROUP BY `Date`

SQLFiddle demo

答案 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