在MySQL中,COUNT()
是一个聚合函数,用于统计表中的行数。它可以与 SELECT
语句一起使用,以计算满足特定条件的记录数量。以下是 COUNT()
函数的一些用法:
数据准备
CREATE TABLE sales_data (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255),
quantity INT,
sale_date DATE
);
INSERT INTO sales_data (product_name, quantity, sale_date) VALUES
('Product A', 10, '2023-01-01'),
('Product B', 20, '2023-01-02'),
('Product C', 15, '2023-01-03'),
('Product A', 5, '2023-01-04'),
(NULL, 30, '2023-01-05'),
('Product B', 0, '2023-01-06');
执行完表格有以下数据
id | product_name | quantity | sale_date |
---|---|---|---|
1 | Product A | 10 | 2023-01-01 |
2 | Product B | 20 | 2023-01-02 |
3 | Product C | 15 | 2023-01-03 |
4 | Product A | 5 | 2023-01-04 |
5 | NULL | 30 | 2023-01-05 |
6 | Product B | 0 | 2023-01-06 |
基本用法
1.统计表中的所有行数:
SELECT COUNT(*) FROM table_name;
这将返回表中所有行的数量,包括那些包含 NULL
值的行。
示例
SELECT COUNT(*) FROM sales_data; // 输出 6
2.统计表中非 NULL 值的行数:
SELECT COUNT(column_name) FROM table_name;
这将返回指定列中非 NULL
值的行数。
示例
SELECT COUNT(product_name) FROM sales_data;// 输出 5,忽略了为 NULL 的记录
3.统计表中非 NULL 并去重后的数量
COUNT()
函数可以与 DISTINCT
关键字一起使用,以统计唯一值(去重)的数量。
SELECT COUNT(DISTINCT column_name) FROM table_name;
这将返回指定列中不同(唯一)值的数量。
示例
SELECT COUNT(DISTINCT product_name) FROM sales_data;
// 输出 3,去重后只有 Product A,Product B,Product C
使用 WHERE 子句
COUNT()
函数经常与 WHERE 子句结合使用,以统计满足特定条件的行数。
SELECT COUNT(*) FROM table_name WHERE condition;
这将返回满足 WHERE 子句中指定条件的行数。
示例
SELECT COUNT(*) FROM sales_data WHERE quantity > 10;// 输出 3
使用 GROUP BY
当与 GROUP BY
子句结合使用时,COUNT()
可以对每个分组进行计数。
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
这将返回每个 column_name 分组的行数。
示例
SELECT product_name, COUNT(*) FROM sales_data GROUP BY product_name;
/* 输出
+--------------+----------+
| product_name | count(*) |
+--------------+----------+
|Product A | 2|
|Product B | 2|
|Product C | 1|
+--------------+----------+
*/
使用 HAVING 子句
HAVING
子句通常与 GROUP BY
一起使用,用于过滤分组后的结果。
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;
这将返回每个 column_name
分组的行数,并且只包括那些计数大于1的分组。
示例
SELECT product_name, COUNT(*) FROM sales_data GROUP BY product_name HAVING COUNT(*) > 1;
/* 输出
+--------------+----------+
| product_name | count(*) |
+--------------+----------+
|Product A | 2|
|Product B | 2|
+--------------+----------+
*/
注意事项
COUNT(*)
和COUNT(1)
在大多数情况下是等价的,都会返回表中的行数,包括那些包含NULL
值的行。COUNT(column_name)
与COUNT(DISTINCT column_name)
的区别在于前者统计所有行(忽略NULL
),后者只统计非NULL
且唯一的值。- 使用
COUNT()
函数时,性能可能会受到表的大小和查询条件的影响。对于大型表,使用索引优化的WHERE
子句可以提高查询效率。