sql算法练习——找出所有员工薪水情况(去重)

题目:

找出所有员工当前(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过滤组)

原文地址:https://www.cnblogs.com/john1015/p/13718589.html