题目描述

有一个薪水表,salaries 简况如下:

找出所有员工当前具体的薪水salary情况 - 图1

建表语句如下:

  1. CREATE TABLE `salaries` (
  2. `emp_no` int(11) NOT NULL,
  3. `salary` int(11) NOT NULL,
  4. `from_date` date NOT NULL,
  5. `to_date` date NOT NULL,
  6. PRIMARY KEY (`emp_no`,`from_date`));

请你找出所有员工具体的薪水 salary 情况,对于相同的薪水只显示一次,并按照金额大小逆序显示,如上述示例查询的结果为:

找出所有员工当前具体的薪水salary情况 - 图2

答案解析

题目本身并没有什么难度,主要在于对 salary 去重

有两种方法:

  1. 使用 GROUP BY
  2. 使用 DISTINCT 关键字

方法一

SQL 语句如下:

  1. SELECT salary
  2. FROM salaries
  3. GROUP BY salary
  4. ORDER BY salary DESC;

方法二

SQL 语句如下:

  1. SELECT DISTINCT salary
  2. FROM salaries
  3. ORDER BY salary DESC;

对于 DISTINCT GROUP BY 的选择:

  1. 当对系统的性能高并且数据量大时使用 GROUP BY
  2. DISTINCT SQL 语言中开销成本最高的函数之一,所以要尽量避免 DISCTINCT 的使用