SQL小技巧
1. 查询第K大
SELECT * FROM table ORDER BY key DESC LIMIT k-1, 1
LIMIT m,n : 表示从第m+1条开始,取n条数据;
LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。
2. 连接
left join,right join,inner join,full join之间的区别
https://www.cnblogs.com/lijingran/p/9001302.html
left join 和 right join 分别只保留左表、右表所有行,连接处笛卡尔乘积
inner join相当于交集, full join相当于并集
3. group by
可以单个字段使用,也可以多个字段使用
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
常用的聚合函数:count() , sum() , avg() , max() , min()
配合一起使用,可以用在SELECT里面,也可以在HAVING中使用去除掉,例如COUNT结果小于1000的组
4. ROW_NUMBER()
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
5. SELECT嵌套使用
SELECT dept_no, emp_no, salary FROM( SELECT dept_emp.dept_no, dept_emp.emp_no, salaries.salary, ROW_NUMBER() over(partition by dept_emp.dept_no order by salaries.salary DESC) k FROM dept_emp LEFT JOIN salaries ON dept_emp.emp_no = salaries.emp_no ) A WHERE k=1 ORDER BY dept_no