SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数:
SQL中提供的聚合函数可以用来统计、求和、求最值等等。
分类:
SELECT COUNT(<计数规范>) FROM <表名>
其中,计数规范包括:
- * :计数所有选择的行,包括NULL值;
- ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL;
- DISTINCT 列名:计数指定列的唯一非空值行。
SELECT COUNT(*) FROM t_student;
也可加入筛选条件,如求女学生数目:
SELECT COUNT(*) FROM t_student WHERE student_sex='女';
SELECT COUNT(DISTINCT student_class) FROM t_student;
DISTINCT即去重,如果不加DISTINCT则结果为表行数——5。
SELECT SUM(student_age) FROM t_student;
返回列平均值(AVG):
计算学生平均年龄:
SELECT AVG(student_age)FROM t_student;
返回最大值/最小值(MAX/MIN):
求年龄最大的学生信息(最小值同理):
SELECT MAX(student_age) FROM t_student;
注:这里只能求出最大年龄,要想显示年龄最大的学生全部信息,需要用到之后的子查询。
数据分组(GROUP BY):
SQL中数据可以按列名分组,搭配聚合函数十分实用。
例,统计每个班的人数:
SELECT student_class,COUNT(ALL student_name) AS 总人数 FROM t_student GROUP BY (student_class);
AS为定义别名,别名的使用在组合及联接查询时会有很好的效果,之后再说。
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!
统计每个班上20岁以上的学生人数:
SELECT student_class,COUNT(student_name) AS 总人数 FROM t_student WHERE student_age >20 GROUP BY (student_class);
HAVING过滤条件:
之前说了分组操作、聚合函数、WHERE过滤的执行顺序,那如果我们希望在聚合之后执行过滤条件怎么办?
例,我们想查询平均年龄在20岁以上的班级
能用下面的语句吗?
SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
SELECT student_class,AVG(student_age) AS 平均年龄 FROM t_student GROUP BY (student_class) HAVING AVG(student_age)>20;
SELECT s.student_id,s.student_name,(SELECT class_name FROM t_class c WHERE c.class_id=s.class_id) FROM t_student s GROUP BY s.student_id;
* 首先这条SQL语句用到了别名,写法为在FORM的表名后加上某个字符比如FROM t_student s,这样在之后调用t_student的某一列时就可以用s.student_id来强调此列来源于对应别名的那张表。
别名在子查询及联接查询中的应用有着很好效果,当两张表有相同列名或者为了加强可读性,给表加上不同的别名,就能很好的区分哪些列属于哪张表。
还有种情况就是在子查询或联接查询时,主查询及子查询均为对同一张表进行操作,为主、子查询中的表加上不同的别名能够很好的区分哪些列的操作是在主查询中进行的,哪些列的操作是在子查询中进行的,下文会有实例说明。
SELECT * FROM t_student WHERE student_subject='C语言' AND student_score>=ALL (SELECT student_score FROM t_student WHERE student_subject='C语言') ;
结果:
SELECT * FROM t_student WHERE student_subject='C语言' AND student_score >(SELECT student_score FROM t_student WHERE student_name='李四' AND student_subject='C语言');
通过上面两例,应该可以明白子查询在WHERE中嵌套的作用。通过子查询中返回的列值来作为比较对象,在WHERE中运用不同的比较运算符来对其进行比较,从而得到结果。
现在我们回到最开始的问题,怎么查出每门课最高成绩的学生的信息:
SELECT * FROM t_student s1 WHERE s1.student_score >= ALL(SELECT s2.student_score FROM t_student s2 WHERE s1.`student_subject`=s2.student_subject);
这里就是上文提到的别名的第二种用法,主、子查询对同一张表操作,区分开位于内外表中相同的列名。
结果:
子查询的分类:
组合查询:
通过UNION运算符来将两张表纵向联接,基本方式为:
SELECT 列1 , 列2 FROM 表1 UNION SELECT 列3 , 列4 FROM 表2;
UNION ALL为保留重复行:
SELECT 列1 , 列2 FROM 表1 UNION ALL SELECT 列3 , 列4 FROM 表2;
转载于:https://www.cnblogs.com/freeitlzx/p/10946534.html
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询相关推荐
- SQL语句汇总(终篇)—— 表联接与联接查询
上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. ...
- 妙用SQL Server聚合函数和子查询迭代求和
本文为原创,如需转载,请注明作者和出处,谢谢! 先看看下面的表和其中的数据: t_product 图1 该表有两个字段:xh和price, 其中xh是主索引字段,现在要得到如下的查询结果: 图2 从上 ...
- SQL语句汇总(一)——数据库与表的操作以及创建约束
首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...
- sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)
sql用于字符串的聚合函数 In this article, you'll learn the tips for getting started using SQL string functions ...
- MySQL数据库——day26 数据库安装,卸载,概念,msq的介绍,安装,连接,DDL,DML,DQL模糊查询,字段控制(别名和运算),排序,聚合函数,分组查询(where和having),分页查询
学到mysql的时候非常的快,感觉前面的没有很巩固,还是要复习前面的博客 常见的数据库 MySQL , Oracle , SQL Server , SQLite , DB2 , - SQL Serve ...
- SQL Server 数据库之聚合函数
聚合函数 1. 概述 2. 聚合函数 2.1 Sum 函数求和 2.2 Avg 求平均值 2.3 Min 函数返回最小值 2.4 Max 函数返回最大值 2.5 Count 函数统计表记录数 2.6 ...
- 把Python函数转换成能在SQL语句中调用的函数
感谢中国传媒大学胡凤国老师提供的案例和第一版代码! 问题描述:把Python函数转换为能在SQLite数据库SQL语句中调用的函数,这样可以大幅度扩展SQL语句的功能. 演示代码: 运行结果: 今天公 ...
- SQL语句中:简单Case函数和Case搜索函数
Case具有两种格式. 简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女' ELSE '其他' END - ...
- pdo_fetch执行mysql_PDO中执行SQL语句的三种方法
在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO ...
最新文章
- 云原生时代消息中间件的演进路线
- JavaScript基础学习之强制类转换(二)
- [Github项目]基于PyTorch的深度学习网络模型实现
- 一个封装了的ADO类,功能非常强大,并做了一个DEMO演示如何操作ACCESS数据库
- 二维的完整形式是什么?
- 异常处理记录: Servlet class X is not a javax.servlet.Servlet
- python识别银行卡数字_Python银行卡数字识别项目 (Opencv)
- java怎么读取数据_java怎么读取数据
- python3吧_基于python3 抓取贴吧图片与评论 图片下载保存
- JavaWeb实用项目之----化妆品销售网
- uniapp 中如何使用echart_uni-app中使用Echarts绘画图表
- C# .Net通过pythonnet调用python pyd文件
- DNS?本地填写的DNS有什么用?DNS怎么工作的?
- 国产CPU架构、国产Linux操作系统及其国产数据库等关键应用
- 工作中的自我反思[实时更新]
- Using insecure protocols with repositories, without explicit opt-in, is unsupported报错解决
- 5 款比较流行的WordPress主题后台选项开发框架
- 下载百度百科秒懂视频-m3u8转格式MP4
- 500 字写一篇程序员的个人发展计划
- PostgreSQL索引介绍