MySQL 如何使用 GROUP BY 和 COUNT 函数

MySQL 如何使用 GROUP BY 和 COUNT 函数

在进行数据分析时,经常需要统计某个时间段内(例如按天、按月)的数据量。MySQL 提供了 GROUP BY 和 COUNT 函数可以方便地进行这种统计。本文主要介绍如何使用 GROUP BY 和 COUNT 函数,并通过示例演示如何按日期对数据进行分组与统计。

阅读更多:MySQL 教程

GROUP BY

GROUP BY 子句是 SQL 中的一个重要语句,用于按照某个列的值将数据分组。GROUP BY 后面可以跟多个列名,将数据按这些列的组合进行分组。

例如,我们有一张表 orders,其中包含了订单的信息,包括订单的日期、商品名称、数量、单价等。以下是 orders 表的结构和数据:

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `product` varchar(100) NOT NULL,
  `quantity` int(11) NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

INSERT INTO `orders` (`id`, `date`, `product`, `quantity`, `price`)
VALUES
    (1, '2021-01-01', '温度计', 10, 30),
    (2, '2021-01-02', '体温计', 5, 50),
    (3, '2021-02-01', '口罩', 100, 1),
    (4, '2021-02-02', '消毒液', 20, 15),
    (5, '2021-03-01', '护目镜', 30, 5),
    (6, '2021-03-02', '防护服', 50, 20);

现在,如果我们要按照日期分组,并统计每一天的订单数量,可以使用如下 SQL 语句:

SELECT date, COUNT(*) AS order_count
FROM orders
GROUP BY date

结果为:

+------------+-------------+
| date       | order_count |
+------------+-------------+
| 2021-01-01 |           1 |
| 2021-01-02 |           1 |
| 2021-02-01 |           1 |
| 2021-02-02 |           1 |
| 2021-03-01 |           1 |
| 2021-03-02 |           1 |
+------------+-------------+

上述 SQL 语句中,我们使用了 GROUP BY 子句将数据按照日期进行分组,并在 SELECT 语句中使用了 COUNT(*) 函数计算每个分组的数据量。结果显示了每个日期对应的订单数量。

COUNT

COUNT 函数用于统计一个表中某个列中非空值的数量。常见的用法是 COUNT(*),表示统计表中所有行的数量,不论列中的值是否为空。

以下是 COUNT 的一些示例用法:

1. 统计 orders 表中的总行数

SELECT COUNT(*) FROM orders

结果为:

+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+

2. 统计 orders 表中的 date 列中非空值的数量

SELECT COUNT(date) FROM orders

结果为:

+------------+
| COUNT(date) |
+------------+
|           6 |
+------------+

3. 统计 orders 表中每个商品出现的次数

SELECT product, COUNT(*) as cnt FROM orders GROUP BY product ORDER BY cnt DESC

结果为:

+----------+-----+
| product  | cnt |
+----------+-----+
| 口罩       |   1 |
| 消毒液     |   1 |
| 护目镜   |   1 |
| 防护服   |   1 |
| 温度计   |   1 |
| 体温计   |   1 |
+----------+-----+

上述 SQL 语句中使用了 COUNT(*) 函数统计每个商品出现的次数,并在 GROUP BY 子句中按商品名分组,最终按次数降序排序。

按日期分组与统计

在实际的数据分析中,我们通常会需要按日期分组,来统计每一天、每个月或每年的数据量,在 MySQL 中,按日期分组的实现依赖于日期和时间函数,以下是一些常用的日期和时间函数介绍。

1. DATE_FORMAT

DATE_FORMAT 函数用于将日期时间格式化为指定的字符串格式。它的基本用法如下:

DATE_FORMAT(date, format_string)

其中 date 是日期时间类型的值,format_string 是一个字符串格式化说明符,它用于指定返回的字符串格式。

以下是一些常用的 format_string 格式说明符:

格式说明符 说明
%Y 年份,4 位数字(例如 2021)
%m 月份,以 01-12 显示
%d 日份,以 01-31 显示
%H 小时,以 00-23 显示
%i 分钟,以 00-59 显示
%s 秒数,以 00-59 显示
%W 星期几(完整的 weekday 名称)
%w 星期几(数字,0 表示周日)

以下是一个例子,我们将 orders 表中的 date 列按照年份和月份进行分组,并统计每个月份的订单数量:

SELECT DATE_FORMAT(date, '%Y-%m') AS month, COUNT(*) AS order_count
FROM orders
GROUP BY month

结果为:

+---------+-------------+
| month   | order_count |
+---------+-------------+
| 2021-01 |           2 |
| 2021-02 |           2 |
| 2021-03 |           2 |
+---------+-------------+

上述 SQL 语句中,我们使用了 DATE_FORMAT 函数将日期格式化为年份和月份的字符串(例如 2021-01),并在 GROUP BY 子句中按照这个月份进行分组。

2. YEAR、MONTH、DATE

YEAR、MONTH、DATE 是 MySQL 中常用的日期和时间函数,它们可以提取出日期或时间值中的年份、月份、日份等信息。

以下是它们的基本用法:

YEAR(date)
MONTH(date)
DATE(date)

其中 date 是日期时间类型的值,YEAR 返回 date 的年份,MONTH 返回 date 的月份,DATE 返回 date 的日期部分(不含时间)。

以下是一个例子,我们将 orders 表中的 date 列按照年份和月份进行分组,并统计每个月份的订单数量,这次我们使用 YEAR 和 MONTH 函数来提取年份和月份:

SELECT YEAR(date) AS year, MONTH(date) AS month, COUNT(*) AS order_count
FROM orders
GROUP BY year, month

结果为:

+------+-------+-------------+
| year | month | order_count |
+------+-------+-------------+
| 2021 |     1 |           2 |
| 2021 |     2 |           2 |
| 2021 |     3 |           2 |
+------+-------+-------------+

上述 SQL 语句中,我们使用了 YEAR 和 MONTH 函数来提取 date 的年份和月份,在 GROUP BY 子句中按照这两个列进行分组。

总结

本文介绍了如何使用 MySQL 的 GROUP BY 和 COUNT 函数来对数据按照日期进行分组和统计。通过示例,我们不仅学会了 GROUP BY 和 COUNT 的基本用法,还掌握了几种按照日期分组的实现方式,包括 DATE_FORMAT、YEAR、MONTH 和 DATE 函数。在实践中,我们可以根据具体的需求和数据特点,选择最合适的方式来进行数据分析和统计。

除了本文介绍的函数和语句,MySQL 中还有许多其他的日期和时间函数,例如 DAY、HOUR、MINUTE、SECOND、WEEK 等,读者可以进一步探索它们的用法和实际应用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程