偷吃公司零食,被通报批评。。
刚看到个贴子,说有运营同事上班时间偷吃公司产品,还“引诱”其他人摸鱼,结果被公司通报+记过。
这事吧,真不能一刀切地看。有网友说“就是吃点东西而已”,但从程序员视角来看,规矩不能随便破。代码出了bug你说是“小事”,可影响上线照样是大问题。
这个偷吃不是重点,引诱别人摸鱼才是本质问题,一旦带节奏影响氛围,公司必须出手。
但也别太紧绷,职场氛围要守规也得有人情味。别让一个通报变成寒气。总的来说还是守住底线,轻松摸鱼可以,别变成带头“放毒”的人。【备注:文末可领最新资料】
面试题:查询员工的累计薪水
今天我们来聊一个看起来平平无奇、但面试里出镜率巨高的算法题:查询员工的累计薪水。
说实话,这题我刚入职那年被SQL面得死去活来,后来发现你只要掌握个两招,瞬间就能从“SQL搬砖仔”变身“数据魔术师”!
那我们先把题目捋清楚:公司有个工资表 Salaries,里面包含字段 employee_id, salary, month。现在老板想查每个员工按月份累计的总薪资,比如张三1月1万、2月2万,那到2月就是3万,对吧?
很多人第一反应是用 SUM(salary),然后 GROUP BY employee_id,但!这样只能算总和,根本做不到按月累计。
你要实现这种“前缀求和”的效果,👊得靠一把好用的窗口函数!
我上代码:
import pandas as pd
# 模拟工资表
df = pd.DataFrame({
'employee_id': [1, 1, 1, 2, 2],
'month': ['2024-01', '2024-02', '2024-03', '2024-01', '2024-02'],
'salary': [10000, 12000, 11000, 15000, 16000]
})
# 转换为datetime方便排序
df['month'] = pd.to_datetime(df['month'])
# 累计薪资计算,按员工ID分组,再按月份排序,计算累计和
df['acc_salary'] = df.sort_values('month').groupby('employee_id')['salary'].cumsum()
print(df)
运行后输出是这样:
employee_id month salary acc_salary
0 1 2024-01-01 10000 10000
1 1 2024-02-01 12000 22000
2 1 2024-03-01 11000 33000
3 2 2024-01-01 15000 15000
4 2 2024-02-01 16000 31000
你看这结果是不是就是老板想要的?💰💰💰
这里几个点值得说说:
1)cumsum() 就是 Pandas 里的前缀和神器,对标SQL里的 SUM(...) OVER (PARTITION BY ... ORDER BY ...); 2)如果你写SQL,那就是:
SELECT
employee_id,
month,
salary,
SUM(salary) OVER (PARTITIONBY employee_id ORDERBYmonth) AS acc_salary
FROM Salaries;
写SQL的朋友看到 OVER 就笑了,这玩意有点像“AI里Attention机制”,关注自己和之前的上下文。
再说一嘴,这题还能衍生出好多变种:
按季度累计?那你得先写个 DATE_TRUNC('quarter', month);累计工资达到10万的月份?可以再加个 WHERE;工资断崖式下降?用 LAG()函数前后对比一下!
说实话,这类题是那种“你觉得简单,考官却能从你写法判断段位”的东西。比如你用 JOIN + 子查询 也能做,但那是青铜段位。会 窗口函数,那才是王者!
对了,☝我前几天用 DeepSeek-R1 本地模型在 PyCharm 里问它怎么写,它几乎1秒就写出这段SQL,还顺手帮我生成了可视化图表,真是爆了!
掌握窗口函数 = 数据题面试不慌。感兴趣的朋友可以试试,不管是 Pandas 还是 SQL,能写出这种累计值逻辑,才是数据处理的基本功!
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领