首页 > 解决方案 > 如何在 MySQL 查询中使用 count 和 CASE 条件?

问题描述

SELECT
COUNT(
 CASE WHEN ( DATE(igs.start_date) >= DATE('2020-05-01') 
           AND DATE(igs.start_date) <= DATE('2020-05-31') 
      THEN igs.id 
      ELSE 0
 END
) AS totalSessions
FROM
`ignite_session` igs

我的要求是我想要特定月份的会话数。从上面的查询中,我得到了错误的计数。当我检查以下查询时,它是 0。

 SELECT
      COUNT(id)
 FROM
      ignite_session igs
 WHERE
      DATE(igs.start_date) >= DATE('2020-05-01') 
      AND DATE(igs.start_date) <= DATE('2020-05-31')

第一个查询是复杂查询的一小部分。我不想在 where 语句中使用日期条件。请帮我处理这个 CASE STATEMENT 查询。totalSessions应该返回 0。

标签: mysqlsqlcase

解决方案


您应该NULL在 else 情况下使用 a 。

喜欢 :

SELECT
COUNT(
    CASE WHEN (DATE(igs.start_date) >= DATE('2020-05-01') 
        AND DATE(igs.start_date) <= DATE('2020-05-31'))
    THEN igs.id 
    ELSE NULL
    END
) AS totalSessions
FROM
`ignite_session` igs

SQL小提琴

MySQL 5.6 架构设置

CREATE TABLE t1
    (`c1` int)
;
    
INSERT INTO t1
    (`c1`)
VALUES
    (1),
    (2),
    (3),
    (4),
    (5)
;

查询 1

select count(case when c1 > 2 then 1 else null end) as nb_count from t1

结果

| nb_count |
|----------|
|        3 |

推荐阅读