【问题标题】:how to display different counts with different conditions?如何在不同的条件下显示不同的计数?
【发布时间】:2014-04-02 12:23:11
【问题描述】:

我必须在不同的条件下显示两个不同的计数,第一列显示任务数量(COUNT(PROJECTWORKPLAN.TASKS)),另一列是延迟任务的数量,我得到了逻辑但不知道如何键入语句。

PROJECTWORKPLAN 表中有这些列有助于确定延迟

tasks:
SDate - Start Date
ASDate - Actual Start Date
EDate - End Date
AEDate - Actual End Date

【问题讨论】:

    标签: mysql sql count conditional-statements


    【解决方案1】:

    使用聚合函数SUM 结合IF 表达式来计算子计数。

    SELECT
        COUNT(1) total,
        SUM(IF(AEDate>EDate,1,0)) delayed
    FROM ...
    

    【讨论】:

    • 我经常使用 COUNT(if(, 1, null))。我更喜欢 COUNT 而不是 SUM,可能是我多年来遵循的标准
    • 嗨,我是提出这个问题的人。可以使用 WHERE 子句来回答这个问题吗?
    【解决方案2】:

    我猜延迟将被定义为如果实际结束日期大于任务结束日期然后任务被延迟,因此您可以将count() 用于所有任务,sum() 用于延迟任务

    SELECT
    COUNT(PROJECTWORKPLAN.TASKS) `all_tasks`,
    SUM(CASE WHEN AEDate >EDate THEN 1 ELSE 0) `delayed_tasks`
    FROM PROJECTWORKPLAN
    GROUP BY PROJECTWORKPLAN.id
    

    【讨论】:

      【解决方案3】:

      这个问题被标记为“mysql”。虽然我喜欢case 语句版本(因为它使用ANSI 标准语法),但MySQL 有一个很大的便利:它将布尔值视为整数。所以,“真”是1,“假”是0。所以你可以用更简单的语法来做到这一点:

      SELECT COUNT(*) total,
             SUM(AEDate > EDate) delayed
      FROM ...
      

      【讨论】:

        猜你喜欢
        • 2022-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多