数据分析SQL面试题求解

#SQL面试##笔试题目##MySQL#
全部评论
使用MySQL做的,个人理解 select t1.order_add_user,  t1.num,  count(distinct t2.num)+1 as rank, (case when count(distinct t2.num)+1<=3 then t1.num*50+1000 else t1.num*50 end) as bonus from (select  order_add_user, sum(quantity) as num,  date_format(order_add_time,"%Y-%m") as month from order where order_add_time<=date_format(now(),"%YYYY-%mm-%dd") and  order_add_time>date_format(now(),"%Y-%m-01") group by order_add_user order by num desc limit 10  ) t1 left join  (select  order_add_user, sum(quantity) as num,  date_format(order_add_time,"%Y-%m") as month from order where order_add_time<=date_format(now(),"%YYYY-%mm-%dd") and  order_add_time>date_format(now(),"%Y-%m-01") group by order_add_user order by num desc limit 10  ) t2   on t1.num<t2.num group by t1.order_add_user order by t1.num desc;
6 回复 分享
发布于 2020-06-27 19:12
先使用sum(price),count(id)group by order_add_user 求出各个员工的业绩,和订单数, 再order by 一下,取limit 10.,最后从上表中count(id) *50 还有一种是直接row_number
1 回复 分享
发布于 2020-03-23 19:31
select t.order_add_user,t.s,t.r,t.c,   case when t.r>3 and t.r<=10 then 50*t.c           when t.r<=3 then 50*t.c+1000  --人名,钱数,排名,订单数,奖金 from( select order_add_user, sum(price*quantity) as s, dense_rank()over(partition by order_add_user, order by sum(price*quantity) desc) as r, count(id) as c from order  where left(oat,7)=left(curdate,7)  group by order_add_user) as t  --本月的 销售员 挣的钱数 排名 单数 where r<=10 --前10名 --没在DB里填数据,有试过的朋友哪里报错还请指正
1 回复 分享
发布于 2022-09-02 12:11 北京
SELECT *, CASE WHEN 排名 <=3 THEN 订单数 * 50+1000 WHEN 排名 BETWEEN 4 AND 10 THEN 订单数 * 50 ELSE 0 END AS "奖金" FROM ( SELECT cust_name, SUM( price ) AS "交易总额", COUNT( price ) "订单数", RANK() over ( ORDER BY SUM( price ) DESC ) AS "排名" FROM bankcall WHERE SUBSTR( order_add_time, 1, 7 ) = SUBSTR( now(), 1, 7 ) GROUP BY cust_name ) AS a WHERE 排名<=10
点赞 回复 分享
发布于 2023-02-10 23:59 广东
学长好!🤣
点赞 回复 分享
发布于 2020-05-16 14:43

相关推荐

06-28 18:19
已编辑
门头沟学院 Java
查看32道真题和解析
点赞 评论 收藏
分享
评论
2
25
分享

创作者周榜

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