【问题标题】:MySql: is it possible to 'SUM IF' or to 'COUNT IF'?MySql:是否可以“SUM IF”或“COUNT IF”?
【发布时间】:2012-10-25 19:07:43
【问题描述】:

我有一列“小时” 我有一列“种类”(可以是 1,2 或 3)

我想做这样的事情:

SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne

SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne

但是 mysql 告诉我我有一个错误...错误是什么!?

请参阅此 stackoverflow 主题:MySQL SUM IF field b = field a

..我无法回复这个...

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用CASE 声明:

    SELECT count(id), 
        SUM(hour) as totHour, 
        SUM(case when kind = 1 then 1 else 0 end) as countKindOne
    

    【讨论】:

    • 在 If SUM(IF(o.id < 500000, 1, 0)) AS imported 中使用你的逻辑
    • @Zohaib 我更喜欢你的方法——它更短更清晰。仍然 +1 以解决问题。
    【解决方案2】:

    你想要这样的东西:

    SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;
    

    请注意,您的第二个示例很接近,但 IF() 函数总是 需要三个参数,因此它必须是 COUNT(IF(kind=1,1,NULL))。我更喜欢上面显示的 SUM() 语法,因为它很简洁。

    【讨论】:

      【解决方案3】:

      你也可以使用比SUM + CASE短的SUM + IF

      SELECT
          count(id)
          , SUM(IF(kind=1, 1, 0)) AS countKindOne
          , SUM(CASE WHEN kind=2 THEN 1 ELSE 0 END) AS countKindTwo
      

      【讨论】:

        【解决方案4】:

        热门答案之间存在细微差别,即SUM(case when kind = 1 then 1 else 0 end)SUM(kind=1)

        kind列中的所有值恰好是NULL时,SUM(case when kind = 1 then 1 else 0 end)的结果是0,而SUM(kind=1)的结果是NULL

        一个例子(http://sqlfiddle.com/#!9/b23807/2):

        架构:

        CREATE TABLE Table1
        (`first_col` int, `second_col` int)
        ;
        
        INSERT INTO Table1
            (`first_col`, `second_col`)
        VALUES
               (1, NULL),
               (1, NULL),
               (NULL, NULL)
        ;
        

        查询结果:

        SELECT SUM(first_col=1) FROM Table1;
        -- Result: 2
        SELECT SUM(first_col=2) FROM Table1;
        -- Result: 0
        SELECT SUM(second_col=1) FROM Table1;
        -- Result: NULL
        SELECT SUM(CASE WHEN second_col=1 THEN 1 ELSE 0 END) FROM Table1;
        -- Result: 0
        

        【讨论】:

          【解决方案5】:

          我从 MYSQL 解决了这样的问题:

          SUM(CASE WHEN used = 1 THEN 1 ELSE 0 END) as amount_one,
          

          希望这会有所帮助:D

          【讨论】:

            【解决方案6】:

            值得注意的是,您可以通过使用查询中的多个字段来构建 Gavin Toweys 的答案,例如

            SUM(table.field = 1 AND table2.field = 2)

            您也可以将此语法用于COUNT,我相信其他功能也是如此。

            【讨论】:

              猜你喜欢
              • 2013-07-04
              • 2017-03-08
              • 1970-01-01
              • 1970-01-01
              • 2019-09-16
              • 2012-01-26
              • 2023-03-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多