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

すべてのレコードを選択したいのですが、名前ごとに過去2年間(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 に答える