汤布里伯 level
获赞
1
粉丝
0
关注
5
看过 TA
6
南京航空航天大学
2027
大数据开发工程师
IP属地:江苏
暂未填写个人简介
私信
关注
题目:求不同工资区间员工数占比思路:① 将连续工资离散化为区间使用 CASE WHEN 对 salary 进行分段,把每一个员工的工资映射到对应的区间标签(如 0-4999、5000-9999),解决“不同区间”的问题。② 按区间聚合统计人数以 salary_range 作为分组维度,用 COUNT(*) 统计每个区间内的员工数量,得到“区间内人数”。③ 在全量数据上计算总人数使用窗口函数 SUM(COUNT(*)) OVER (),在不改变行数的前提下,一次性算出公司总人数,避免额外的子查询或表连接。④ 计算并格式化占比用 区间人数 / 总人数 * 100.0 得出百分比,并通过 ROUND() 保留两位小数,最终产出“各区间人数及其占比”。易错点:① 区间边界重叠或遗漏​使用 CASE WHEN时,若写成 salary <= 5000和 salary >= 5000,会导致 5000 元同时落入两个区间;若漏写 ELSE,部分数据会被 静默忽略。✅ 建议采用 左闭右开(如 < 5000, >= 5000 AND < 10000)并显式处理 ELSE '其他'。② NULL 值导致统计失真​工资字段为 NULL的员工不会参与聚合,导致 分母(总人数)偏小。✅ 务必使用 WHERE salary IS NOT NULL或在 CASE中定义 '未录入'分支。③ 整数除法导致结果为 0​直接写 COUNT(*) * 100 / SUM(...)在严格模式会因整数相除,导致 所有占比都变成 0。✅ 转为浮点数:COUNT(*) * 100.0 / SUM(...)。④ 窗口函数分区范围错误​误写 SUM(...) OVER (PARTITION BY dept_id),会把 部门内占比​ 当成 全公司占比。✅ 全量占比必须使用 OVER ()(无分区)。⑤ 字符串排序导致区间乱序​按 salary_range字符串排序,会出现 10000+排在 0-4999前面的逻辑混乱。✅ 应按数值排序:ORDER BY MIN(salary)或增加辅助排序字段。
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务