MySQL Distinct

MySQL Distinct 语句用于从 SELECT 语句中指定的列中检索唯一行(通过删除重复的行)。

Select Distinct 在 MySQL 中的基本语法可写如下。

SELECT DISTINCT [Columns]
FROM Source
WHERE Conditions -- This is Optional
  • DISTINCT:此关键字返回唯一列。
  • Columns:它允许我们选择要从表中使用的列数。可以是一列或多列。
  • Source:它可以是数据库中的一个或多个表。使用 Joins 来组合多个表。

我们将使用下面显示的数据来通过示例解释 Select Distinct。

Customers Records 1

MySQL Select Distinct 单列

在此 Distinct 单列示例中,我们将从 Education 列中选择唯一记录。在获取唯一记录之前,我将选择 education 列中的所有记录。

USE company;
SELECT Education
FROM customerdetails;
Single Column 2

现在,我将在 SELECT 语句中使用此关键字。

USE company;
SELECT DISTINCT Education
FROM customerdetails;
MySQL Select Distinct Single Column 3

MySQL Select Distinct 多列

当我们在多列上使用 Distinct 时,SELECT 语句将写出多列的唯一组合,而不是唯一的单个记录。

在此 MySQL 示例中,我们将选择 Education 列和 Profession 列中存在的唯一记录。

USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education, Profession;
Multiple Columns 4

尽管我们在 SELECT 语句中使用了 Distinct 关键字。从上面的屏幕截图可以看出,它返回了重复项,因为

  • Bachelors 和 Developer 是唯一的组合。
  • Bachelors 和 Programming 是唯一的组合,依此类推。

Distinct WHERE 子句示例

在此示例中,我们将展示如何将此语句与 WHERE 子句一起使用。以下语句从年收入大于或等于 85000 的 customers 表中返回唯一的 Education、Profession。

USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
WHERE Yearly_Income > 85000;
Distinct Where Clause 5

尽管 Education 和 Professional 列组合有 13 条唯一记录。有 10 条记录不符合 WHERE 子句中的条件。这就是为什么下面的屏幕截图显示 5 条记录。

注意:它将 NULL 记录视为有效的唯一记录。因此,请使用任何 Not Null 函数来删除 NULLS。

MySQL Distinct 与 Group By 的区别

Select Distinct 的行为继承自 Group By。如果您在没有任何聚合函数的情况下使用 Group By 子句,那么它的作用就像 Distinct 关键字。它们之间唯一的区别是

  • Group By 先对数据进行排序,然后执行分组。
  • 此关键字不执行任何排序。

如果将此关键字与 Order By 一起使用,那么它的结果与 Group By 相同。以下语句从客户详细信息中返回唯一的 Profession 值。

USE company;
SELECT DISTINCT Profession 
FROM customerdetails;
Distinct vs Group By 6

让我删除关键字并使用 Group By 子句

USE company;
SELECT Profession 
FROM customerdetails
GROUP BY Profession;

可以看到,它们返回相同的结果,但顺序不同。

这次,我将此关键字与 Order By 一起使用。

USE company;
SELECT DISTINCT Profession 
FROM customerdetails
ORDER BY Profession ASC;

可以看到,它返回的结果与 Group By 相同。

Select Distinct Group By 8

使用 Order By 子句选择唯一行

让我向您展示如何在命令提示符中使用 Order By 子句选择不同的记录。在这里,我们从 customer 详细信息列中选择不同的 Education 和 profession 记录。

USE company;
SELECT DISTINCT Education, Profession 
FROM customerdetails
ORDER BY Education ASC, Profession ASC;