2013-03-16 77 views
1

我有这样的一个表:mysql的设置过滤器中选择不进行过滤

id name salary year 

1 A  100  2013 
2 B  88  2012 
3 C  95  2010 
4 A  45  2012 
5 B  87  2011 
6 C  98  2011 
7 A  54  2009 

我想选择所有记录,但表现出的薪水总和过去两年(2013,2012),只为每名?但是下面的查询会给出所有年份的总和。

select name, sum(salary) as total from table group by name; 

输出应该是:

name total 
A  145 
B  88 
C  0 

注:我知道使用where子句会拿到,但我想所有名称显示。

回答

1

我想知道为什么你不想用WHERE条款。无论如何,MySQL支持内联IF声明。

SELECT Name, 
     SUM(IF(year IN (2013,2012), salary, 0)) total 
FROM tableName 
GROUP BY Name 

输出

╔══════╦═══════╗ 
║ NAME ║ TOTAL ║ 
╠══════╬═══════╣ 
║ A ║ 145 ║ 
║ B ║ 88 ║ 
║ C ║  0 ║ 
╚══════╩═══════╝ 

,如果你想更RDBMS友好,你可以使用CASE

SELECT Name, 
     SUM(CASE WHEN year IN (2013,2012) THEN salary ELSE 0 END) total 
FROM tableName 
GROUP BY Name 
+1

快速闪电..谢谢。我需要SphinxQL中的这个解决方案,它的工作表示感谢。 –

+0

不客气':D' –