1

我有一张这样的桌子:

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 子句会得到,但我希望显示所有名称。

4

1 回答 1

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
于 2013-03-16T12:01:29.343 回答