【问题标题】:mysql set filter select without filteringmysql set filter 选择不过滤
【发布时间】:2013-03-16 20:06:47
【问题描述】:

我有一张这样的桌子:

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

【问题讨论】:

    标签: mysql sql select group-by


    【解决方案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
    

    【讨论】:

    • 这很快……谢谢。我需要 SphinxQL 中的这个解决方案,谢谢。
    猜你喜欢
    • 2012-05-26
    • 2018-02-17
    • 2013-04-06
    • 1970-01-01
    • 2015-07-30
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多