浅谈group by和order by的用法和区别

原创 2015年09月01日 02:26:45

前一段时间的面试,问道这个问题,不太清楚了,感觉有必要来总结一下。话不多说,直接开始吧!

一、order by的用法

使用order by,一般是用来,依照查询结果的某一列(或多列)属性,进行排序(升序:ASC;降序:DESC;默认为升序)。

当排序列含空值时:

ASC:排序列为空值的元组最后显示。

DESC:排序列为空值的元组最先显示。

为了好记忆,我的理解是,可以把null值看做无穷大,因为不知道具体为多少。然后去考虑排序,asc升序null肯定在最后,而desc降序,null肯定在最前面。(我的想法,轻喷。。。微笑

1》单一列属性排序

举例1:默认排序:

select * from s

select * from s order by sno desc

按照sno降序:


2》多个列属性排序

选择多个列属性进行排序,然后排序的顺序是,从左到右,依次排序。

如果前面列属性有些是一样的话,再按后面的列属性排序。(前提一定要满足前面的属性排序,因为在前面的优先级高)。

举例2:

select * from s  
order by sname desc, sage desc


首先按照sname降序排序,然后出现了xx一样的,在按照sage降序排序。(默认sage是升序)。

如果最开始使用sno排序,

select * from s 
order by sno desc,  sage asc

必须先满足前面列属性的排序(sno在前优先级高)。才会去考虑后续列属性的排序。

二、group by的用法

group by按照查询结果集中的某一列(或多列),进行分组,值相等的为一组。

1》细化集函数(count,sum,avg,max,min)的作用对象:

未对查询结果分组,集函数将作用于整个查询结果。

对查询结果分组后,集函数将分别作用于每个组。

例子3:

求各个课程号及相应的选课人数:

SELECT cno,count(sno) from sc



对整个表进行count。

SELECT cno,count(sno) from sc group by cno


对分组的表进行count

sc表内容如下:


2》GROUP BY子句的作用对象是查询的中间结果表

分组方法:按指定的一列或多列值分组,值相等的为一组。

使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性(比如:sno)和集函数(比如:count())。

select sno,count(cno) from sc group by sno



3》多个列属性进行分组举例:

select cno,grade,count(cno) from sc group by cno,grade


cno为1且成绩为66的,有3个


4》使用HAVING短语筛选最终输出结果

只有满足HAVING短语指定条件的组才输出。

HAVING短语与WHERE子句的区别:作用对象不同。

1》WHERE子句作用于基表或视图,从中选择满足条件的元组

2》HAVING短语作用于,从中选择满足条件的

举例:

查询选修了3门以上课程的学生学号:

select sno from sc group by sno having count(cno)>3



举例:

查询选修了3门以上课程,且所有课程成绩都高于60分的学生学号及课程数

select sno , count(cno)
from sc 
where grade > 60  
group by sno having count(cno) > 3


好的,先就总结到此吧,后续还会继续。由于水平有限,难免有不对的地方,还请指教。微笑加油!!!

GROUP BY 和 ORDER BY一起使用

====================== 写程序也有很长的一段时间了,有些东西我总不曾去思考,很少去积累一些有用的东西,总喜欢“用要即拿”的心态来对待,这是非常不好的坏习惯。这样只会造成依赖心太...
  • haiross
  • haiross
  • 2014-08-28 14:51:52
  • 161214

group by和order by配合使用注意

对于sql server来说: GROUP BY和ORDER BY同时存在的情况是,ORDER BY对GROUP BY后的结果再进行排序的,所以ORDER BY后面的排序字段需要在SELECT里出现...
  • caomiao2006
  • caomiao2006
  • 2015-11-23 20:29:49
  • 3109

mysql group by 与order by 一起使用

今天在做mysql分组查询的时候遇到一个问题:    我需要把数据分组排序,于是就想到先group by 然后 order by,可以运行的时候报错    于是上午搜了下才发现group by 与or...
  • WonderFey
  • WonderFey
  • 2017-09-04 12:12:38
  • 3483

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序 2010-06-06 15:34 使用count(列名)当某列出现null值的时...
  • superhosts
  • superhosts
  • 2014-09-15 21:14:55
  • 13745

mysql中group by和order by同时使用无效的替代方案

前言最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生。在此做个记录,以备不时之需。需求(得到所有barC...
  • u013259845
  • u013259845
  • 2017-06-23 16:20:15
  • 2929

MySQL数据库操作---group by、having、where、order by的使用

SUM函数用来求和、group by用来分组查询。一、建表、插入数据1、创建一个student表2、查看student表结构3、插入6条数据4、插入了6条数据后,我们可以发现自增数据(auto_inc...
  • will130
  • will130
  • 2015-11-12 11:55:07
  • 3431

MySQL中group by和order by同时使用

本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表    我现在需要取出每个分类中最新的内容 select * from testgroup by ...
  • lkforce
  • lkforce
  • 2016-09-20 17:30:07
  • 4176

GROUP BY 跟 ORDER BY一起使用

正确使用如下: SELECT dep.department_name, MAX(emp.salary), MIN(emp.salary) FROM departments dep LEF...
  • lutinghuan
  • lutinghuan
  • 2012-04-22 13:29:48
  • 12660

关于mysql中 group by , order by , where, having 语句的区别与运用

最近一直在忙着和数据库有关的一些工作,这几天在写存储过程的时候,一些mysql的语句突然感觉有些不太明白,就是group   by   ,  order   by  ,where   ,  havin...
  • qq_22642239
  • qq_22642239
  • 2016-11-23 16:20:50
  • 3378

MySQL高级 之 order by、group by 优化

order by示例示例数据: Case 1 Case 2 Case 3 Case 4 结论:order by子句,尽量使用Index方式排序,在索引列上遵循索引的最佳左前缀原则。 复合(...
  • wuseyukui
  • wuseyukui
  • 2017-05-22 17:57:14
  • 2373
收藏助手
不良信息举报
您举报文章:浅谈group by和order by的用法和区别
举报原因:
原因补充:

(最多只允许输入30个字)