题目
即:不同年龄段的客户信息。
提前声明:
本题是作者根据自己的知识独立解决,并非标准答案,如果更好的答案,欢迎在下方留言
数据库中的表
知识储备
floor():结果向下取整
now():获取当前具体时间
year():获取年份
ifnull(a,b):如果a的值不为null,结果为a,否贼为b
解题思路
难点两个:1.年龄段划分。2.年薪
难点一:
先说说年薪怎么算和难点:
表中只给了月薪,和年终奖,并且年终奖不是所有人都有。
分组是一定要做的,在不考虑年龄段的问题时,加入统计每个人的年薪,则是,按员工分组,月薪*12 + 年奖。
因为年奖可能为空,所以此时会报错,使用ifnull函数可以解决这个问题,如果为空,取0
难点二:
年龄段划分和我上一篇时间段划分类似,我就是按照这个思路想的。
因为题目只给了日期,所以,要先获取年龄,即:当前年份-生日年份。用到了now() 和year(),不做过多讲解。
接下来,按照题目要求,10为一个年龄段,那就将年龄/10,向下取整。就能判断当前用户在哪个范围。
最后,按照年龄段分组,聚合。
答案
select floor((YEAR(now()) - YEAR(c.birthdate)) / 10) as ys,
count(floor((YEAR(now()) - YEAR(c.birthdate)) / 10)) as count,
avg(s.mothsalary*12 + IFNULL(s.yearbonus,0)) as avg
FROM customers c,salary s
WHERE c.id = s.id
GROUP BY ys
ORDER BY ys ASC