题解:统计salary的累计和running_total

统计salary的累计和running_total

http://www.nowcoder.com/questionTerminal/58824cd644ea47d7b2b670c506a159a6

SELECT 
emp_no, salary, SUM(salary) OVER(ORDER BY emp_no) AS running_total
FROM
salaries
WHERE to_date = '9999-01-01'

窗口函数直接搞定

全部评论
此处因为over()中使用了order by子句,所以默认从第一行累计到当前行;若不使用order by子句,则会针对整个分区求和(此处没指定partition by,所以将整个表视为一个分区)
17 回复 分享
发布于 2021-09-16 10:58
居然还有这种函数,现在都还没看懂。
2 回复 分享
发布于 2021-09-11 15:53
这个窗口函数运行效率最高
2 回复 分享
发布于 2021-04-23 22:24
to_date字段不是主键,也不是唯一索引,这种写法在to_date不是9999-01-01的时候就有问题了吧,这道题只是恰好可以这么做 贴一个我认为比较正确的答案,如果有不对的可以指正select emp_no, salary, sum(salary) over (order by emp_no) as running_total from (select s.emp_no, s.salary, s.from_date, s.to_date from salaries s join (select emp_no, max(from_date) as from_date from salaries group by emp_no) t on s.emp_no=t.emp_no and s.from_date=t.from_date) t1
点赞 回复 分享
发布于 2024-11-08 11:47 江苏
请问这样使用窗口函数,题目中提到的running_total是前两个月的薪水,怎么得到控制呢?
点赞 回复 分享
发布于 2024-07-19 18:24 黑龙江
这么写是不对的吧?salary与running_total就都是9999-01-01了
点赞 回复 分享
发布于 2022-02-28 17:17
其实也可以通过定义变量or表连接来做
点赞 回复 分享
发布于 2022-02-08 11:29
为什么 SELECT emp_no, salary, SUM(salary) OVER(partiton BY emp_no) AS running_total FROM salaries WHERE to_date = '9999-01-01' 会报错
点赞 回复 分享
发布于 2021-08-22 15:34

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
155
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务