跳到主要内容

SQL DISTINCT与聚合

在SQL中,DISTINCT关键字和聚合函数是两个非常强大的工具,它们可以帮助我们从数据库中提取有用的信息。DISTINCT用于去除查询结果中的重复行,而聚合函数(如COUNTSUMAVG等)则用于对数据进行汇总计算。本文将详细介绍如何结合使用DISTINCT和聚合函数,以及它们的实际应用场景。

什么是DISTINCT?

DISTINCT关键字用于从查询结果中去除重复的行。它通常用于选择唯一的值,尤其是在处理包含重复数据的表时。例如,如果你有一个包含多个重复值的列,使用DISTINCT可以只返回这些值的唯一实例。

基本语法

sql
SELECT DISTINCT column_name
FROM table_name;

示例

假设我们有一个名为employees的表,其中包含员工的姓名和部门信息:

sql
SELECT department
FROM employees;

输出可能如下:

department
----------
HR
IT
HR
Finance
IT

如果我们只想获取唯一的部门名称,可以使用DISTINCT

sql
SELECT DISTINCT department
FROM employees;

输出将变为:

department
----------
HR
IT
Finance

什么是聚合函数?

聚合函数用于对一组值执行计算,并返回单个值。常见的聚合函数包括:

  • COUNT():计算行数。
  • SUM():计算数值列的总和。
  • AVG():计算数值列的平均值。
  • MIN():查找最小值。
  • MAX():查找最大值。

基本语法

sql
SELECT aggregate_function(column_name)
FROM table_name;

示例

继续使用employees表,假设我们想知道每个部门的员工数量:

sql
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

输出可能如下:

department | employee_count
-----------|---------------
HR | 2
IT | 2
Finance | 1

DISTINCT与聚合函数的结合使用

在某些情况下,我们可能需要在聚合函数中使用DISTINCT,以确保只对唯一的值进行计算。这在处理包含重复数据的列时非常有用。

基本语法

sql
SELECT aggregate_function(DISTINCT column_name)
FROM table_name;

示例

假设我们有一个sales表,其中包含销售记录,每条记录都有一个product_idsales_amount。我们想知道每种产品的总销售额,但每个产品的销售额可能有重复。

sql
SELECT product_id, SUM(DISTINCT sales_amount) AS total_sales
FROM sales
GROUP BY product_id;

在这个例子中,SUM(DISTINCT sales_amount)确保每个产品的销售额只被计算一次,即使有多个相同的销售额。

实际应用场景

场景1:统计唯一客户数量

假设我们有一个orders表,其中包含客户ID和订单金额。我们想知道有多少个唯一的客户下了订单。

sql
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;

场景2:计算唯一产品的平均价格

假设我们有一个products表,其中包含产品ID和价格。我们想知道所有唯一产品的平均价格。

sql
SELECT AVG(DISTINCT price) AS average_price
FROM products;

总结

DISTINCT关键字和聚合函数是SQL中非常有用的工具,它们可以帮助我们从数据库中提取有用的信息。通过结合使用DISTINCT和聚合函数,我们可以确保只对唯一的值进行计算,从而得到更准确的结果。

附加资源与练习

  • 练习1:编写一个SQL查询,统计sales表中每个产品的唯一销售额数量。
  • 练习2:编写一个SQL查询,计算orders表中每个客户的唯一订单金额总和。
提示

如果你对SQL的聚合函数和DISTINCT关键字有更多疑问,建议查阅SQL官方文档或参考相关教程,以进一步巩固你的知识。