题目:
找出所有员工当前(to_date='9999-01-01')具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
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`));
代码:
1 select salary from salaries 2 where to_date = '9999-01-01' 3 group by salary 4 order by salary desc;
笔记:
在大表中 distinct 的效率不高,所以大数据量的时候都被禁止使用,建议使用 group by解决重复问题。
distinct相当于哈希表,将所有数据加载进来,时间复杂度低,空间复杂度高,
group by是排序,时间复杂度高,空间复杂度低。
WHERE语句在GROUP BY语句之前,SQL会在分组之前计算WHERE语句。(WHERE过滤行)
HAVING语句在GROUP BY语句之后,SQL会在分组之后计算HAVING语句。(HAVING过滤组)