SQL语句重的判断

  虽然我早就知道sql语句的强大之处,正好比数据分析师们什么都不会,单凭一门sql语言就出来各种各样的数据。但我也从来没想到自己会有一天在sql语句里头进行判断处理。

  起因:老师让给查一下每个人每学期总共有多少学时的课,他想看看每周每个人大概的课程数。刚好 我们的课表系统的数据结构是每一节课一条数据,如果时间分为单双周或者是时间段分开了则存成不同的元组,所以我需要做的就是把某个人的所有课程信息先groupby一下人命,然后每一节课的结束周数减去开始周数,最后求个sum就可以获得到一学期的课了。听起来没问题,写起来也很简单。
```
SELECT course.user_name,user.user_class,user.department, sum(course.end_week - course.start_week + 1) As total
FROM timeTable.course
inner join user 
on user.dd_id = course.dd_id
WHERE course.is_delete = 0
group by user_name
order by total desc
```
![初步结果](https://upload-images.jianshu.io/upload_images/11675149-ee27d5fb686cc68a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然后同学见到了我随口一问,才发现,自己忽略了单双周的两种情况,单周和双周计算课时的方法时不一样的,需要除以2或者除以2再加一,这就需要用到判断了啊。。

实际上挺慌的,怕没法完美完成任务,然后就去bing一下,查mysql条件语句,竟然真的有能够在mysql里面进行条件查询的语句天呐。瞬间变得激动了起来,也不知道为什么,写原生代码(sql)总是让我感到很激动,比JPA或者是其他JDBC什么激动许多。然后开始上手用,尝试着使用case when then,把我查到的例子粘贴过来吧~![出自他人回答](https://upload-images.jianshu.io/upload_images/11675149-ff42b582342b4ffe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
瞬间SQL语句变得更加灵活了,然后经过各种测试编写,除了最后sum函数应该包括的内容卡了我一下,其他的就顺理成章的出来了,很好。
```
SELECT course.user_name,user.user_class,user.department, 
sum(case course.type 
when 1 then (course.end_week - course.start_week + 2)/2
when 2 then (course.end_week - course.start_week)/2 + 1
when 0 then course.end_week - course.start_week + 1
END) AS total,
sum(case course.type 
when 1 then (course.end_week - course.start_week + 2)/2
when 2 then (course.end_week - course.start_week)/2 + 1
when 0 then course.end_week - course.start_week + 1
END)/19 AS perWeek
FROM timeTable.course
inner join user 
on user.dd_id = course.dd_id
WHERE course.is_delete = 0
group by user_name
order by total desc
```
![最终结果](https://upload-images.jianshu.io/upload_images/11675149-a423371f8f6f1a44.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值