您现在的位置是:首页 > 正文

group by和order by的用法和区别

2024-02-01 03:16:36阅读 2

本文转自:https://blog.csdn.net/jiangxindu1/article/details/48147149
前一段时间的面试,问道这个问题,不太清楚了,感觉有必要来总结一下。话不多说,直接开始吧!

一、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:


 
 
   
  1. select * from s
  2. order by sname desc, sage desc


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

如果最开始使用sno排序,


 
 
   
  1. select * from s
  2. 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分的学生学号及课程数


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


网站文章

  • Coinbase:Web3堆栈的简单指南

    Coinbase:Web3堆栈的简单指南

    来源:Coinbase博客原标题:《A simple guide to the Web3 stack》编译:胡韬行业已经对 web3 提出了很多定义,但在 Coinbase,我们通常认为 ...

    2024-02-01 03:16:06
  • JavaScript项目总结一

    1.类选择其下,第一个 $('selector').first()==$('selector:first')==$('selector:eq(0)') ...

    2024-02-01 03:15:59
  • 随笔——消息队列线程池模型如何保证重启时消息不丢

    随笔——消息队列线程池模型如何保证重启时消息不丢

    背景 今天在脉脉上面看到了一个帖子,比较有意思:这个帖子的意思是:在使用Kafka的时候,我们已经设置了多个分区,如何去提升消费能力?如果使用线程池的方式去提升如何保证重启时消息不丢。这...

    2024-02-01 03:15:51
  • springcloud — 微服务鉴权管理Spring Security OAuth2原理解析(四)

    springcloud — 微服务鉴权管理Spring Security OAuth2原理解析(四)

    回顾之前文章:1. 微服务鉴权管理之OAuth2原理解析(一)2. 微服务鉴权管理Spring Security原理解析(二)3. 微服务鉴权管理Spring Security OAuth2原理解析(...

    2024-02-01 03:15:22
  • Java报错ClassNotFoundException或者NoSuchMethodError

    Java报错ClassNotFoundException或者NoSuchMethodError

    出现这种报错99%为包版本不同,依赖冲突导致。

    2024-02-01 03:15:15
  • 利用bind9架设智能DNS——postgreSQL数据库篇

    智能DNS工作原理: 在用户解析一个域名的时候,判断一下用户的IP,然后跟DNS服务器内部的IP表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址。目前的域名服务运营商不提供智能DNS服务,所以必须自行架设DNS服务或者使用网上免费的智能DNS

    2024-02-01 03:15:08
  • 计算机网络:网络层——数据平面

    计算机网络:网络层——数据平面

    概述 两种重要的网络层功能:转发和路由选择。(forwarding and routing) 数据层面(Data plane): local, per-router function determin...

    2024-02-01 03:15:02
  • 兴趣篇——用C语言写打字母游戏

    昨天说的,以后会写和小游戏相关的博客,事不宜迟,今天就先开始用最简单的C语言编写一个简单的打字母小游戏吧。 应今天我的软件工程老师的一句话:当做一件事时,如果能很快的从中得到正反馈,我们将会有成就感,我们将会提高对它的兴趣。 我们编程的入门语言是C语言,是一门相对简单的编程语言,但是大多数大学生或者其他刚刚接触编程学完C语言的人,往往会产生一个疑问:我们学习了C语言到底能干什么?更有甚者,像计

    2024-02-01 03:14:32
  • 带宽和时延究竟有没有关系

    一、严格意义上来说是不一样的,简单点说,网络为什么会出现延时,一定程度上就是带宽时延和数据量造成的;举个例子来说就很清楚了:带宽,bandwidth,是指每秒钟传输的最大字节数。带宽本来是指某个信号具...

    2024-02-01 03:14:26
  • python django框架orm_利用Python的Django框架中的ORM建立查询API

    摘要在这篇文章里,我将以反模式的角度来直接讨论Django的低级ORM查询方法的使用。作为一种替代方式,我们需要在包含业务逻辑的模型层建立与特定领域相关的查询API,这些在Django中做起来不是非常...

    2024-02-01 03:14:20