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 ...
随机推荐
- Ambari深入学习(II)-实现细节
在第一节中,我们简单讲了一下Ambari的系统架构.我们这一节主要分析Ambari的源代码,总览Ambari的具体实现方式及其工作细节. 一.Ambari-Server启动 Ambari-Server ...
- Java程序员必了解的JVM原理以及虚拟机的运行过程
JVM概念 虚拟机:指以软件的方式模拟具有完整硬件,VM概念 虚拟机:指以软件的方式模拟具有完整硬件系统功能.运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现.常用的虚拟机有VMWare ...
- vxlan 协议
vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...
- el-select和el-cascader的visible-change下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
原文:https://blog.csdn.net/CarryBest/article/details/79959389 今天做项目时,用elementUI框架,需要下拉框隐藏时出发某个函数,用了vis ...
- git reset --hard HEAD^后显示more?的原因及如何解决
在windows的cmd控制台下操作git,想要回滚到上一次提交,但是输入git reset --hard HEAD^后就显示more? fatal: ambiguous argument 'HEAD ...
- iOS - 架构模式 - 解密 MVC、MVP、MVVM、VIPER架构
在 iOS 中使用 MVC 架构感觉很奇怪? 迁移到MVVM架构又怀有疑虑?听说过 VIPER 又不确定是否真的值得切换? 相信你会找到以上问题的答案,如果没找到请在评论中指出. 你将要整理出你在 i ...
- java服务端集成极光消息推送--详细开发步骤
1.极光推送账号准备 要使用极光消息推送必须先在官方网站上注册账号,并添加应用. 产品介绍:https://docs.jiguang.cn/jpush/guideline/intro/ 注册开发者账号 ...
- laravel项目中通过nvmw安装node.js和npm 开发环境-- windows版
windows版本安装 此教程执行的时候,网速一定要好.不然可能出现各种错误. 如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ git clone nvmw 直接从 githu ...
- React: webpack模块组织关系
现代前端开发离不开打包工具,以 webpack 为代表的打包工具已经成为日常开发必备之利器,拿 React 技术栈为例,我们 ES6 形式的源代码,需要经过 webpack 和 Babel 处理,才能 ...
- Xshell6和Xftp6 破解免安装版,无窗口多开限制
免安装无窗口限制破解版 链接:https://pan.baidu.com/s/1wpFE499qoTjqHrPdQmTn4g提取码:2xcn 如上面的链接失效,可使用以下的链接: https://pa ...