MySQL 计算唯一值的数量

MySQL 计算唯一值的数量

在处理数据时,我们通常需要计算某列数据的唯一值的数量。例如,在统计用户的阅读量时,我们需要知道有多少个不同的用户阅读了文章。MySQL 提供了自带的 COUNT 函数,可以方便地计算某列数据的数量。但是,在计算唯一值数量时,我们需要用到 DISTINCT 关键字来去重。本文将介绍如何使用 MySQL 的 COUNT 和 DISTINCT 函数来计算某列数据的唯一值数量。

阅读更多:MySQL 教程

基本语法

使用 COUNT 和 DISTINCT 函数计算唯一值数量的基本语法如下:

SELECT COUNT(DISTINCT column_name) FROM table_name;
Mysql

其中,column_name 是需要计算唯一值数量的列名,table_name 为数据所在的表名。以上语句将返回 column_name 列中唯一值的数量。

实例演示

假设我们有一个用户阅读记录表 users_read 记录了每个用户阅读的文章和阅读时间。现在我们需要计算有多少个不同的用户阅读了文章。

首先,我们查看 users_read 表的结构和数据:

DESC users_read;

+----------+---------+------+-----+---------+----------------+
| Field    | Type    | Null | Key | Default | Extra          |
+----------+---------+------+-----+---------+----------------+
| user_id  | int(11) | NO   |     | NULL    |                |
| article_id | int(11) | NO   |     | NULL    |                |
| read_time | datetime | NO   |     | NULL    |                |
+----------+---------+------+-----+---------+----------------+

SELECT * FROM users_read;

+---------+------------+---------------------+
| user_id | article_id | read_time            |
+---------+------------+---------------------+
| 1       | 101        | 2021-08-01 12:00:00  |
| 1       | 102        | 2021-08-02 10:00:00  |
| 2       | 103        | 2021-08-02 11:00:00  |
| 3       | 101        | 2021-08-02 12:00:00  |
| 2       | 102        | 2021-08-03 09:00:00  |
| 1       | 103        | 2021-08-03 10:00:00  |
| 3       | 102        | 2021-08-03 11:00:00  |
| 3       | 104        | 2021-08-04 11:00:00  |
| 2       | 104        | 2021-08-05 10:00:00  |
| 1       | 104        | 2021-08-05 12:00:00  |
+---------+------------+---------------------+
Mysql

我们可以使用以下语句来计算不同用户阅读的文章数量:

SELECT COUNT(DISTINCT user_id) FROM users_read;

+-------------------------+
| COUNT(DISTINCT user_id) |
+-------------------------+
| 3                       |
+-------------------------+
Mysql

以上语句将返回不同用户阅读的文章数量:

  • 用户 1 阅读了 3 篇文章;
  • 用户 2 阅读了 3 篇文章;
  • 用户 3 阅读了 3 篇文章。

因此,不同用户阅读的文章数量为 3。

此外,若想计算不同文章被多少用户阅读,可以使用以下语句:

SELECT COUNT(DISTINCT article_id) FROM users_read;

+---------------------------+
| COUNT(DISTINCT article_id) |
+---------------------------+
| 4                         |
+---------------------------+
Mysql

以上语句将返回不同文章被多少用户阅读的数量:

  • 文章 101 被 2 个用户阅读;
  • 文章 102 被 3 个用户阅读;
  • 文章 103 被 2 个用户阅读;
  • 文章 104被 3 个用户阅读。

因此,不同文章被阅读的数量为 4。

注意事项

在使用 COUNT 和 DISTINCT 函数时,需要注意以下几点:

  • 如果某列中有 NULL 值,使用 COUNT(DISTINCT column_name) 时,计算的是不包括 NULL 值的唯一值数量。如果要计算包括 NULL 值在内的唯一值数量,需要使用 COUNT(DISTINCT IFNULL(column_name, 0)))。
  • COUNT 和 DISTINCT 函数可以和 GROUP BY 一起使用,用于分组计算某列数据的唯一值数量。例如,以上例中可以使用以下语句来计算每篇文章被多少不同的用户阅读:
    SELECT article_id, COUNT(DISTINCT user_id) FROM users_read GROUP BY article_id;
    Mysql

总结

本文介绍了使用 MySQL 的 COUNT 和 DISTINCT 函数计算某列数据的唯一值数量的方法,并给出了实例演示。在使用 COUNT 和 DISTINCT 函数时,需要注意 NULL 值的处理以及和 GROUP BY 一起使用的情况。希望本文能够对大家在处理数据时有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册