题目描述
有一个薪水表,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 salary
FROM salaries
GROUP BY salary
ORDER BY salary DESC;
方法二
SQL 语句如下:
SELECT DISTINCT salary
FROM salaries
ORDER BY salary DESC;
对于 DISTINCT 与 GROUP BY 的选择:
- 当对系统的性能高并且数据量大时使用 GROUP BY
- DISTINCT 是 SQL 语言中开销成本最高的函数之一,所以要尽量避免 DISCTINCT 的使用