所有回答列表(5)
遇见, LV36
2014年10月24日
很简单 你的写法第一种 不加max的时候
执行SQL为:
SELECT `姓名`, CASE `课程` WHEN '语文' THEN `分数` ELSE 0 END '语文', CASE `课程` WHEN '数学' THEN `分数` ELSE 0 END '数学', CASE `课程` WHEN '物理' THEN `分数` ELSE 0 END '物理' FROM TB GROUP BY `姓名`;
那么在不分组之前SQL为:
SELECT `姓名`, CASE `课程` WHEN '语文' THEN `分数` ELSE 0 END '语文', CASE `课程` WHEN '数学' THEN `分数` ELSE 0 END '数学', CASE `课程` WHEN '物理' THEN `分数` ELSE 0 END '物理' FROM TB;
那么不分组数据为:
然后group by `姓名`;
执行group by `姓名`时因为没有任何聚合函数, 那么会从基表里取group by后字段的第一条数据。即:
也就是你第一条SQL执行的结果:
OK。 我们再来说说第二个SQL。
第二个sql为:
SELECT `姓名`, MAX(CASE `课程` WHEN '语文' THEN `分数` ELSE 0 END) '语文', MAX(CASE `课程` WHEN '数学' THEN `分数` ELSE 0 END) '数学', MAX(CASE `课程` WHEN '物理' THEN `分数` ELSE 0 END) '物理' FROM TB GROUP BY `姓名`;
先分解下SQL,执行MAX内CASE WHEN 及未GROUP BY `姓名`时SQL:
SELECT `姓名`, CASE `课程` WHEN '语文' THEN `分数` ELSE 0 END '语文', CASE `课程` WHEN '数学' THEN `分数` ELSE 0 END '数学', CASE `课程` WHEN '物理' THEN `分数` ELSE 0 END '物理' FROM TB;
得到结果为:
这个结果其实和第一个SQL一样。
我们看看第二个SQL:
SELECT `姓名`, MAX(CASE `课程` WHEN '语文' THEN `分数` ELSE 0 END) '语文', MAX(CASE `课程` WHEN '数学' THEN `分数` ELSE 0 END) '数学', MAX(CASE `课程` WHEN '物理' THEN `分数` ELSE 0 END) '物理' FROM TB GROUP BY `姓名`;
第二个SQL对分数进行了MAX函数操作同时又对`姓名`进行了分组。
那么这个基表max()中因为case when `课程` 取最大分数,再对`姓名`进行分组。
自然是取了每个姓名下每个学科的最高成绩。即:
评论(4)
最佳答案
antonio689
2014年10月23日
你想想你那么写的逻辑嘛, 如果按照你第一种写法,
按照sql查询执行的顺序,先按名字分组,然后第一个语文符合条件,成绩就能正确出来,但是遇到数学时,第一个case,不是语文当然就取0了。而第二种写法,同样遇到数学时是0,但是会继续执行第二个case,这时是83,取两个最大的,当然就不是0了,然后继续执行第三个case,是0,去两个最大的,当然还是83了。其他同理!
qq792005991 LV3
2014年10月23日
- 等 最代码怎么获取牛币啊?
- 完 谁来告诉我最代码上线的时间,答对者给5牛币,先来先得
- 等 牛友们,大家好,你们做程序员多久了?现在还好吗?
- 完 在微信打开的页面里进行app下载
- 等 最代码2014年欢乐聚声会
- 完 mysql如何查询表数据并且对3个字段降序的SQL?
- 完 最代码牛币机制改革
- 完 成功的在bae上使用了自定义运行环境 jetty+nginx的组合,大家对jetty+nginx优化有哪些心得?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 为什么java BufferedImage类处理大图直接抛出内存溢出的异常?
- 等 最代码是否开发手机app客户端?
- 完 java程序员学习哪些java的技术?java有哪些框架?都能做哪方面的开发?
- 等 php格式网页文件怎么运行?
- 等 Java volatile值获取的问题
- 等 前端vue,拦截了登录后台后,返回的token,requests拦截token,但是发送请求的时候,就出现跨越异常
- 等 大专本科计算机科班怎么找到Java工作?
- 等 eclipse怎么把三个java swing游戏项目合成一个项目?
- 完 伙伴们,大家都有什么好的解压方式么,分享一下~
- 完 三四线城市,6、7k,运维工作,索然无味,想去辞职上培训,各位牛牛有什么建议嘛
- 等 jsp页面输入中文变成问号
- 等 JPA在线上运行一段时间后报错Caused by: java.lang.IncompatibleClassChangeError: null
- 等 PHP 这个规则用preg_match_all怎么写
- 等 大佬们,有没有知道Alfresco如何配置LDAP登录呢?
- 等 php的install目录是框架带的吗?
相关问答
- 等 Mac系统安装mysql成功,但是终端登录mysql为什么报Access denied for user root@localhost?
- 完 Mysql中能否使用select 1 from table查询?
- 等 mysql 分组查每组里创建时间最大的那条数据
- 完 MySql数据库中的主键和Oracle数据库中的如何通过sql确认那个字段是主键?
- 等 mysql如何实现查询一段时间的签到和未签到的用户信息按天展示?
- 等 mysql触发器为什么没执行?
- 等 mysql数据库查询问题
- 完 mysql主从配置:slave_IO_Running: No 怎么解决?
- 完 mysql自定义函数哪里出问题了
- 完 为什么本地WEB项目无法访问服务器Mysql数据库?
- 等 MySQL怎么查询每天打卡的最早时间和最晚时间?
- 完 linux如何查看mysql进程下某个线程执行的语句是什么?