hive/oracle/mysql 窗口函数练习

hive/mysql/oracle 学习心得1

  • 介绍
    • 对比
    • 有用的代码片段

介绍

我在公司长期做oracle开发,最近在学习mysql和hive语法,总结

对比

由于现在学习的是mysql8,mysql被oracle收购,整体语法也在向oracle语法靠拢
hive的语法也看出是在跟随mysql

一开始最不能适应的是连接写法,已经习惯了在oracle里写
a.id=b.id
在mysql里必须写 a join b on …

还有hive里子查询有的执行不了,起初还以为是版本问题,后来才发现就是不支持
不过也强制让你使用开窗函数,也算便利

有用的代码片段

找出最高工资的人的信息
一看到最高,马上想到的就是max函数

  • 我工作中遇到的话是用用子查询
    这样三层嵌套效率不高
// 我工作中遇到的话是用用子查询
SELECT
	*
FROM
	salaries
where user_id in  (select user_id from (
	SELECT
		userid,
		max(salary) AS maxsalary
	FROM
		salaries
	GROUP BY
		userid
));

  • 课程中给出用连接
    两层嵌套
// 课程中给出用连接
SELECT
	*
FROM
	salaries
INNER JOIN (
	SELECT
		userid,
		max(salary) AS maxsalary
	FROM
		salaries
	GROUP BY
		userid
) AS sub ON salaries.userid = sub.userid
AND salaries.salary = sub.maxsalary

  • 窗口函数解决思路
// 课程中给出用连接
select * from ( 
SELECT *,row_number() over(partition by userid order by salary desc ) as rank_salary 
from salaries) as sub 
where rank_salary = 1

你可能感兴趣的:(sql,mysql,oracle,hive)