2013-03-16 109 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' –