首页 > 其他分享 >8)排序、分组

8)排序、分组

时间:2023-05-27 20:33:30浏览次数:35  
标签:count group score 分组 table 排序 select schema

1、排序 order by:

order by:按照给定的字段或字段列表对结果集进行排序;asc是默认缺省值,升序排列;desc表示降序排序;

order by {col_name | expr | position} {[asc] | desc}
    [,{col_name | expr | position} {[asc] | desc},...]

1)单列排序:

select * from choose order by score desc;

其中,null按最小值处理;

 

select stu_no,exam_score,regular_score, exam_score*0.8+regular_score*0.2 total_score
    from exam
    order by total_score desc;

 可以看到按总分降序排列;上述也可以写成,将 结果集的第四列的total_score 写成 4:

select stu_no,exam_score,regular_score,exam_score*0.8+regular_score*0.2 total_score
    from exam
    order by 4 desc;

2)多列排序:

将 table_schema 升序排列,table_name 按降序排列;

select table_schema,table_name
    from information_schema.tables
    order by table_schema,table_name desc;

2、组函数:

1)组函数对null值会忽略掉;

select count(*),count(class_no) from student;

 

select count(score),avg(score) from choose;
select max(choose_time),min(choose_time) from choose;

 2)组函数参数使用distinct修饰;

select count(*), count(class_no),count(distinct class_no) from student;

 

select count(table_schema),count(distinct table_schema) from information_schema.tables;

3、分组:

group by子句将查询结果按照某个字段进行分组,字段值相同的作为一个分组,通常与聚合函数一起使用;

group by 字段列表[ having 条件表达式]

1)单列分组:

将每个学生的均分显示出来;

select student_no,avg(score) from choose
    group by student_no;

 

select table_schema, count(*) cnt from information_schema.tables
    group by table_schema;

2)多列分组:

将每个学生及其对应的名字分组;

select s.student_no,s.student_name,sum(score) 总分, avg(score) 平均分
    from student s,choose c
    where s.student_no = c.student_no
    group by s.student_no,s.student_name;

 

select table_schema,table_type, count(*) cnt 
    from information_schema.tables
    group by table_schema,table_type;

 

此处我们若是想进一步筛选计数值,可能会想到where子句来进行筛选;

 我们可以看到:where子句中不能使用字段或表达式的别名,也不能使用组函数;

4)having 子句:

在group by筛选的基础上,若想进一步筛选,则需要用到having 子句;

having 条件表达式
select table_schema,table_type,count(*) cnt
    from information_schema.tables
    group by table_schema, table_type
    having cnt >= 60;

select table_schema,table_type,count(*) cnt
    from information_schema.tables
    group by table_schema, table_type
    having count(*) >= 60
    order by cnt desc;

 5)总结:

#语法顺序:
select
    from
        where
            group by
                having
                    order by

#执行顺序:
from
    where
        select
            group by
                having by
                    order by

说明:

  一旦有别名,那么所有字段都必须使用别名了,from 一定是最先执行的,没有from,就没有表,别名也是在这儿命名的;因此它是第一个执行的;

  接着where 子句不能使用字段或表达式的别名,也不能使用组函数;因此它第二个执行;

  select 字段是第三个执行,我们需要筛选的字段;

  group by是筛选的基础上进一步分组;

  having by 一定是在group by 的基础上有的;

  最后是order by;

  

 

标签:count,group,score,分组,table,排序,select,schema
From: https://www.cnblogs.com/xuan01/p/17436895.html

相关文章

  • drf-过滤、排序、分页
    目录一过滤Filtering1.1内置过滤类1.2第三方过滤类1.3自定义过滤类价格等于44或者书名是红楼梦价格在100----200之间的图书二排序视图类过滤和排序一起使用三分页Pagination视图类page.py四基于APIView写过滤、排序和分页4.1写过滤和排序4.2写分页4.3分页的源码一过滤......
  • 数据结构与算法—排序算法篇
    1、选择排序1.1、算法思想每趟从待排序的数据元素中,选出最小(或最大)的一个元素,顺序放在待排序的数列最前面,直到全部待排序的数据元素排完。1.2、步骤1、查找此数列中的最小元素,将其与第一个交换2、从第二个值开始找,查找到最小元素,将其与第二个交换3、以此类推,直到遍历结束1.3、算法......
  • drf之restful规范中的过滤、排序和分页
    目录一、过滤内置过滤类第三方过滤类自定义过滤类价格再100----200之间的图书二、排序三、分页作业过滤和排序带分页一、过滤restful规范中-请求地址中带过滤条件带过滤的接口只有:查询所有内置过滤类fromrest_framework.filtersimportSearchFilterclassBookView(G......
  • drf——基于apiview写过滤、排序和分页
    基于APIView带过滤和排序fromrest_framework.viewsimportAPIViewfrom.modelsimportBookfrom.serializerimportBookSerializerfromrest_framework.responseimportResponseclassBookView(APIView):#/books/?ordering=-price&name=红楼梦defget(self,......
  • EasyCVR视频融合平台设备分组共享功能的使用介绍
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议、多类型的设备接入,并能对设备进行分级、分组管理,并支持权限、角色分配,属于功能全面、性能稳定、高可靠、高可用的流媒体视频云服务平台。很多用户都使用过平台的......
  • SpringBoot集成swagger-ui以及swagger分组显示
    文章目录1.swagger配置类2.使用swagger3.额外的学习经历大家好,这篇文章展示下如何在springboot项目中集成swagger-ui。有人说,这都是老生常谈,网上的例子数不胜数。确实swagger诞生至今已经很久了,但是在使用过程中我遇到一个问题,下面给大家分享下我的使用心得吧。1.swagger配置类第......
  • 算法之常见排序算法-冒泡排序、归并排序、快速排序
    对于编程中琳琅满目的算法,本人向来是不善此道也不精于此的,而说起排序算法,也只是会冒泡排序。还记得当初刚做开发工作面试第一家公司时,面试官便让手写冒泡排序(入职之后才知道,这面试官就是一个冒泡排序"病态"爱好者,逢面试必考冒泡排序-__-)。后来看吴军的一些文章,提到提高效率的关键就......
  • Algorithm_02--C#排序算法(升序)
    (升序)算法原理:通过重复比较和交换,使较大的元素逐渐“浮”到数组后面。具体步骤:1.比较相邻元素,如果第一个比第二大,就交换它们两个。2.对每一对相邻元素作同样的工作,从开始第一到结尾的最后一对。这样再最后的元素应该会是最大数。3.针对所有的元素重复以上的步骤,除了最后一个。......
  • drf——权限、认证源码分析、过滤、排序、分页
    权限、认证源码(了解)权限源码#继承了APIView才有的---》执行流程---》dispatch中的三大认证 self.initial(request,*args,**kwargs) #1.APIView的dispatch中self.initial(request,*args,**kwargs) definitial(self,request,*args,**kwargs):se......
  • drf过滤,drf排序,drf分页
    drf过滤:带过滤的接口只有:查询所有内置过滤类:http://127.0.0.1:8000/api/v1/books/?search=红http://127.0.0.1:8000/api/v1/books/?search=11此类查询类似于模糊查询fromrest_framework.filtersimportSearchFilterclassBookView(Gene......