COUNT聚合函数
COUNT 是 MySQL 中一个常用的聚合函数,用于统计满足条件的行数。有3种使用方式:
- COUNT(*):统计表中所有行的数量,包括 NULL 值。
- COUNT(字段):统计指定字段非 NULL 值的行数。
- COUNT(条件查询):统计满足特定条件的行数。
表构建
示例表:asset_product(资产产品表)
- 表结构
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | 主键,唯一标识符 |
name | VARCHAR(255) | 产品名称 |
price | DECIMAL(10,2) | 产品价格 |
status | VARCHAR(50) | 产品状态(启用/禁用) |
created_time | TIMESTAMP | 创建时间 |
- 建表(DDL)
CREATE TABLE asset_product (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2),
status VARCHAR(50) DEFAULT 'enabled',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 示例数据
INSERT INTO asset_product (name, price, status) VALUES
('Laptop', 1200.00, 'enabled'),
('Smartphone', 800.00, 'enabled'),
('Tablet', 400.00, 'disabled'),
('Headphones', 150.00, 'enabled'),
('Speaker', NULL, 'enabled');
以上是函数操作的数据源
COUNT 函数的详细解析和示例
- COUNT(*):统计所有行数,包括 NULL 值。
SELECT COUNT(*) AS total_rows FROM asset_product;
结果:
total_rows
5
- COUNT(字段):统计指定字段非 NULL 值的行数
SELECT COUNT(price) AS non_null_prices FROM asset_product;
结果
non_null_prices
4
- COUNT(条件查询):统计满足特定条件的行数
查询统计价格大于100的产品个数
# 查询统计价格不为NULL的产品个数(看着像查询统计价格大于100的产品个数)
SELECT COUNT(price > 100) AS price_filter FROM asset_product;
结果
price_filter
4
# 查询统计价格不为NULL的产品个数(看着像查询统计价格大于1200的产品个数)
SELECT COUNT(price > 1200) AS price_filter FROM asset_product;
结果
price_filter
4
# 改变price的大小就能发现,price > 100(布尔表达式)是在在判断是否为NULL,
# 条件为真,返回 1(等价于 true)。条件为假,返回 0(等价于 false)。
应该这样写
# 查询统计价格大于100的产品个数
# 写法1
SELECT COUNT(CASE WHEN price > 100 THEN 1 ELSE NULL END) AS result FROM asset_product;
# 写法2
SELECT
COUNT(
IF(price > 100, 1, NULL)
) AS result
FROM asset_product;
# 写法3
SELECT count(price > 100 or null) AS result FROM asset_product;
# 写法4
SELECT COUNT(*) AS result FROM asset_product WHERE price > 100;
结果
result
4
注意:使用COUNT()函数实现条件统计的基础是对于值不为NULL的记录计数。