在报表这样的地方需要统计,例如:我需要一个 SQL 统计今天有多少订单、有多少已支付、有多少取消。
我们使用 MySQL 的 COUNT() 执行统计,带上条件语句 COUNT() 就能按指定条件统计。
COUNT(*)
COUNT(*)
统计的是数据量。假设有一条数据所有字段都为 null,虽然数据无效,但是也会记为一条。COUNT(field)
COUNT(field)
统计的有效数据,如果有 null 出现,将会忽略。例如 name
字段有三条数据,但是有一个是 null,这时候统计结果就只有 2
。因为 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';