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
 
原文地址:https://www.cnblogs.com/eastblue/p/15538791.html