题目描述
有一个薪水表,salaries 简况如下:

建表语句如下:
CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_date`));
请你找出所有员工具体的薪水 salary 情况,对于相同的薪水只显示一次,并按照金额大小逆序显示,如上述示例查询的结果为:

答案解析
题目本身并没有什么难度,主要在于对 salary 去重
有两种方法:
- 使用 GROUP BY
- 使用 DISTINCT 关键字
方法一
SQL 语句如下:
SELECT salaryFROM salariesGROUP BY salaryORDER BY salary DESC;
方法二
SQL 语句如下:
SELECT DISTINCT salaryFROM salariesORDER BY salary DESC;
对于 DISTINCT 与 GROUP BY 的选择:
- 当对系统的性能高并且数据量大时使用 GROUP BY
- DISTINCT 是 SQL 语言中开销成本最高的函数之一,所以要尽量避免 DISCTINCT 的使用
