SQL SELECT DISTINCT 某一列,返回多个其他列(SQL Server)

SQL SELECT DISTINCT 某一列,返回多个其他列(SQL Server)

在本文中,我们将介绍如何使用SELECT DISTINCT语句在SQL Server中选择某一列的不同值,并返回该行中的其他多个列。

阅读更多:SQL 教程

概述

SQL Server中,SELECT DISTINCT语句用于从一张表或多个表中选择不同的行,并返回满足条件的唯一值。通常,我们只需要选择某一列的不同值,并忽略其他列的重复数据。然而,在某些情况下,我们可能需要同时返回其他列的值,以提供更完整的信息。

示例数据库

为了更好地说明问题,我们将使用一个示例数据库,其中包含一个名为employees的员工表。这个表具有以下列:

  • employee_id:员工ID,唯一标识每个员工
  • first_name:员工的名字
  • last_name:员工的姓氏
  • department:员工所属的部门

以下是employees表的一些示例数据:

employee_id first_name last_name department
1 John Doe IT
2 Jane Smith HR
3 David Johnson Sales
4 Lisa Williams Finance
5 Michael Brown Marketing
6 Jennifer Davis IT
7 Christopher Miller Finance

基本用法

使用SELECT DISTINCT语句返回某一列的不同值非常简单。以下是基本的语法格式:

SELECT DISTINCT column_name
FROM table_name;

例如,如果我们想获取所有不同的部门名称,可以使用以下查询:

SELECT DISTINCT department
FROM employees;

这将返回一个包含所有不同部门名称的结果集。

返回多列

但是,如果我们想同时返回其他列的值呢?在SQL Server中,我们可以使用子查询和JOIN语句来实现这一目标。

例如,如果我们想要选择不同的部门,并返回每个部门的员工数量和所有员工的姓氏,我们可以使用以下查询:

SELECT department, COUNT(employee_id) AS employee_count, GROUP_CONCAT(last_name) AS employee_last_names
FROM employees
GROUP BY department;

这个查询首先按部门分组,然后使用COUNT函数计算每个部门中的员工数量。同时,使用GROUP_CONCAT函数将每个部门中的员工姓氏以逗号分隔的形式合并成一个字符串。这样,我们就可以同时返回部门名称、员工数量和员工姓氏。

示例

为了更好地说明这个概念,让我们看一个具体的例子。假设我们想要选择不同的部门,并返回每个部门的总薪资和平均年龄。

首先,我们需要创建一个名为employees的员工表,其中包含以下列:

CREATE TABLE employees (
  employee_id INT PRIMARY KEY,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  department VARCHAR(50),
  salary INT,
  age INT
);

INSERT INTO employees (employee_id, first_name, last_name, department, salary, age)
VALUES
  (1, 'John', 'Doe', 'IT', 5000, 30),
  (2, 'Jane', 'Smith', 'HR', 6000, 35),
  (3, 'David', 'Johnson', 'Sales', 7000, 40),
  (4, 'Lisa', 'Williams', 'Finance', 8000, 45),
  (5, 'Michael', 'Brown', 'Marketing', 9000, 50),
  (6, 'Jennifer', 'Davis', 'IT', 5500, 28),
  (7, 'Christopher', 'Miller', 'Finance', 7500, 38);

然后,我们可以使用以下查询来选择不同的部门,并返回每个部门的总薪资和平均年龄:

SELECT department, SUM(salary) AS total_salary, AVG(age) AS average_age
FROM employees
GROUP BY department;

这将返回一个结果集,包含不同部门的总薪资和平均年龄的值。

总结

通过使用SELECT DISTINCT语句和子查询/JOIN语句,我们可以选择某一列的不同值,并返回其他多个列的值。这在我们需要基于某些唯一值获取其他相关信息时非常有用。在编写查询时,我们需要确保使用正确的语法和适当的聚合函数来计算所需的值。希望通过本文的介绍能够帮助您更好地理解如何在SQL Server中实现这个目标。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程