MySQL 带条件 COUNT() 统计计数

发表于 2023-02-09

不一样的统计需求

在报表这样的地方需要统计,例如:我需要一个 SQL 统计今天有多少订单、有多少已支付、有多少取消。

我们使用 MySQL 的 COUNT() 执行统计,带上条件语句 COUNT() 就能按指定条件统计。

关于 COUNT() 小知识

  • COUNT(*)
    • COUNT(*) 统计的是数据量。假设有一条数据所有字段都为 null,虽然数据无效,但是也会记为一条。
  • COUNT(field)
    • COUNT(field) 统计的有效数据,如果有 null 出现,将会忽略。例如 name 字段有三条数据,但是有一个是 null,这时候统计结果就只有 2

条件语句结合 COUNT()

因为 COUNT(field) 函数不会记录 null 值。所以写法如下:

-- 使用 =、>、< 等条件运算符
SELECT
    COUNT(1) AS total,
    COUNT(status = 20 OR null) AS payCount,
    COUNT(status = 21 OR null) AS payCancel
FROM product_order
WHERE created_time = '2023-02-09';
-- 使用 IF() 函数
SELECT
    COUNT(1) AS total,
    COUNT(IF(status = 20, 1, null)) AS payCount,
    COUNT(IF(status = 21, 1, null)) AS payCancel
FROM product_order
WHERE created_time = '2023-02-09';
-- 使用 CASE 语句
SELECT
    COUNT(1) AS total,
    COUNT(CASE WHEN status = 20 THEN 1 END) AS payCount,
    COUNT(CASE WHEN status = 21 THEN 1 END) AS payCancel
FROM product_order
WHERE created_time = '2023-02-09';