mysql设置过滤器选择而不过滤

时间:2013-03-16 12:00:10

标签: mysql sql select group-by

我有一张这样的表:

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

答案 0 :(得分: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