SQL基础-汇总统计及GROUP BY
一、汇总统计
1、聚集函数
- COUNT() 计算总数
- SUM() 求和
- MAX() 最大值
- MIN() 最小值
- AVG() 平均值
2、聚集函数使用
- 总共有多少名学生?
- SELECT COUNT(*) FROM student;
- 所有学生的数学成绩总和?
- SELECT SUM(score) FROM student;
- 所有学生的数学成绩最高分?
- SELECT MAX(score) FROM student;
- 所有学生的数学成绩最低分?
- SELECT MIN(score) FROM student;
- 所有学生的数学成绩平均分?
- SELECT AVG(score) FROM student;
- ###
- 有多少名学生?
- SELECT COUNT(*) FROM student; 219
- 另一种写法:
- SELECT COUNT(score) FROM student; 219
- SELECT COUNT(student_id) FROM student; 219
- SELECT COUNT(1) FROM student; 219
- SELECT COUNT('ABC') FROM student; 219
- SELECT COUNT(teacher_id) FROM student; 205
- COUNT(teacher_id) 忽略掉了值为null的行;
- 同样忽略值为NULL的行:
- SELECT MAX(score) FROM student;
- SELECT MIN(score) FROM student;
- SELECT SUM(score) FROM student;
- SELECT AVG(score) FROM student;
- count(*) 与count(1)比较:
- 如果你的数据表没有主键,那么count(1)比count(*)快
- 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
- 如果你的表只有一个字段的话那count(*)就是最快的啦
- count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。
- 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
- 因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的。
- AVG(score) 等价于SUM(score)/COUNT(score)
3、分组汇总统计
- 关键字:GROUP BY
- 比如:
- 如何获取每个班级的数学成绩平均分(因为学生太多,这里先不计算成绩在80分以下的学生),以便比较不同班级的成绩?
- SELECT class_id,avg(score) FROM student WHERE score > 80 GROUP BY class_id;
- 注意:SELECT里除了使用聚集函数返回的字段外,其他所有的字段都必须原样出现在GROUP BY的后面;
- 比如:
- 如何统计不同的交易所的总的买入金额?
- SELECT left(stock_code,2),sum(price*volume)
- FROM t_stock_trans_dtl
- WHERE opt_typ = '买入'
- GROUP BY left(stock_code,2);
- 比如:
- 如何统计不同的交易所的不同交易类型的总的交易金额?
- #根据多个字段分组
- SELECT left(stock_code,2),opt_typ,sum(price*volume)
- FROM t_stock_trans_dtl
- GROUP BY left(stock_code,2),opt_typ;
- GROUP BY会将NULL值的行,分到同一组计算统计值;
- SELECT teacher_id,count(*)
- FROM student
- GROUP BY teacher_id;
二、汇总统计
1、过滤分组结果
- 关键字:GROUP BY + HAVING
- having关键字专门用来对group by进行指定条件;
- having和where比较:
- having:过滤分组,在GROUP BY后执行;
- where:过滤行,在GROUP BY前执行;
- 比如:
- 如何获取教授15名以上学名的老师?
- SELECT teacher_id,count(*)
- FROM student
- GROUP BY teacher_id
- HAVING count(*) > 15;
- 比如:
- 如何获取数学成绩平均分在70分及以上的班级?
- SELECT
- class_id,avg(score)
- FROM student
- GROUP BY class_id
- HAVING avg(score) >= 70;
2、排序分组结果
- 比如:
- 如何获取每个班级的数学成绩平均分(不计算数学成绩在80分以下的学生),然后以平均分从高到低排序?
- 使用关键字:GROUP BY + ORDER BY
- #会先执行where,再进行order by
- SELECT
- class_id,avg(score)
- FROM student
- WHERE score > 80
- GROUP BY class_id
- ORDER BY avg(score) DESC;
- 如果每次查询都想得到确定的排序结果,则必须使用ORDER BY!
3、SELECT子句顺序
最简单的SQL语句:
- SELECT 1;
SQL基础-汇总统计及GROUP BY的更多相关文章
- sql 基础练习 计算7天各个时间点的总和 group by order mysql一次查询多个表
SQL 基础练习 -- 创建数据库 CREATE DATABASE school CHARACTER SET UTF8; -- 使用数据库 USE school; -- id: 学生的id -- na ...
- Oracle知识梳理(三)操作篇:SQL基础操作汇总
Oracle知识梳理(三)操作篇:SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式: CREATE TABLE table_name ( col_ ...
- SQL基础操作汇总
SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式: CREATE TABLE table_name ( col_name datatype, -- ...
- SQL基础-----DML语句
之前已经介绍过SQL基础之DDL(数据库定义语言)语句,http://www.cnblogs.com/cxq0017/p/6433938.html(这是地址) 这篇文章主要介绍DML语句(数据库操纵语 ...
- 2.Mysql SQL基础
2.Mysql SQL基础2.1 SQL简介 SQL(Structure Query Language)是结构化查询语言.2.2 SQL使用入门 2.2.1 SQL分类 SQL分为DDL.DML(DQ ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 《SQL基础教程》+ 《SQL进阶教程》 学习笔记
写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
随机推荐
- (1)ASP.NET Core 应用启动Startup类简介
1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax.FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Star ...
- Hyper-V虚拟机配置内部网络固定IP 并且连接外网
2019/10/23 Hyper-V CentOS7 摘要:Hyper-V中的虚拟机CentOS7能固定IP并且连接外网 保证宿主机的Xshell始终只用同一个IP连接到该虚拟机 新建内部网络虚拟交换 ...
- Cascader 级联选择器hover选择效果
官网例子 <div class="block"> <span class="demonstration">hover 触发子菜单< ...
- Excel工作表密码保护的破解
操作步骤:打开Visual Basic编辑器,单击“插入-->模块“,将以下代码粘贴到模块中即可. Sub DelPassword() ActiveSheet.Protect DrawingOb ...
- shell EOF 用户自定义终止符
#!/bin/bash ftp -n << EOF user guest 123456 binary cd /home/ prompt mget * close bye EOF 使用Tab ...
- springcloud中gateway的实际应用
之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...
- IDEA下创建Spring项目
IDEA下创建Java SE Spring项目示例 1.创建项目 第4步:是否自动创建空的Spring容器配置文件,默认文件名是spring-config.xml.勾不勾选都行,如果没勾选,后面要自己 ...
- Linux应用与端口
lsof -i:port --- 得到对应端口的应用pid PS -ef|grep pid --- 根据pid得到对应应用
- day 02 作业 预科
目录 作业 作业 ==1.什么是编程== 通过使用编程语言做一些事情,表达一些自己的想法. ==2.简述计算机五大组成.== 计算机由cpu ,运算器 ,控制器,存储器(外存,内存) 输入设备 输出设 ...
- Linux NFS 共享
通过NFS网络文件系统,可以通过网络共享目录,让网络上的其他主机可以通过挂载访问共享目录的数据. Server 安装相关软件包 [root@server ~]# yum install nfs-uti ...