一、汇总统计

1、聚集函数

  1. COUNT() 计算总数
  2. SUM() 求和
  3. MAX() 最大值
  4. MIN() 最小值
  5. AVG() 平均值

2、聚集函数使用

  1. 总共有多少名学生?
  2. SELECT COUNT(*) FROM student;
  3.  
  4. 所有学生的数学成绩总和?
  5. SELECT SUM(score) FROM student;
  6.  
  7. 所有学生的数学成绩最高分?
  8. SELECT MAX(score) FROM student;
  9.  
  10. 所有学生的数学成绩最低分?
  11. SELECT MIN(score) FROM student;
  12.  
  13. 所有学生的数学成绩平均分?
  14. SELECT AVG(score) FROM student;
  15.  
  16. ###
  17. 有多少名学生?
  18. SELECT COUNT(*) FROM student; 219
  19.  
  20. 另一种写法:
  21. SELECT COUNT(score) FROM student; 219
  22. SELECT COUNT(student_id) FROM student; 219
  23. SELECT COUNT(1) FROM student; 219
  24. SELECT COUNT('ABC') FROM student; 219
  25. SELECT COUNT(teacher_id) FROM student; 205
  26.  
  27. COUNT(teacher_id) 忽略掉了值为null的行;
  28.  
  29. 同样忽略值为NULL的行:
  30. SELECT MAX(score) FROM student;
  31. SELECT MIN(score) FROM student;
  32. SELECT SUM(score) FROM student;
  33. SELECT AVG(score) FROM student;
  34.  
  35. count(*) count(1)比较:
  36. 如果你的数据表没有主键,那么count(1)比count(*)快
  37. 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
  38. 如果你的表只有一个字段的话那count(*)就是最快的啦
  39. count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。
  40. 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
  41. 因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的。
  42.  
  43. AVG(score) 等价于SUM(score)/COUNT(score)

3、分组汇总统计

  1. 关键字:GROUP BY
  2.  
  3. 比如:
  4. 如何获取每个班级的数学成绩平均分(因为学生太多,这里先不计算成绩在80分以下的学生),以便比较不同班级的成绩?
  5.  
  6. SELECT class_id,avg(score) FROM student WHERE score > 80 GROUP BY class_id;
  7.  
  8. 注意:SELECT里除了使用聚集函数返回的字段外,其他所有的字段都必须原样出现在GROUP BY的后面;

  1. 比如:
  2. 如何统计不同的交易所的总的买入金额?
  3.  
  4. SELECT left(stock_code,2),sum(price*volume)
  5. FROM t_stock_trans_dtl
  6. WHERE opt_typ = '买入'
  7. GROUP BY left(stock_code,2);
  8.  
  9. 比如:
  10. 如何统计不同的交易所的不同交易类型的总的交易金额?
  11. #根据多个字段分组
  12. SELECT left(stock_code,2),opt_typ,sum(price*volume)
  13. FROM t_stock_trans_dtl
  14. GROUP BY left(stock_code,2),opt_typ;
  15.  
  16. GROUP BY会将NULL值的行,分到同一组计算统计值;
  17.  
  18. SELECT teacher_id,count(*)
  19. FROM student
  20. GROUP BY teacher_id;

二、汇总统计

1、过滤分组结果

  1. 关键字:GROUP BY + HAVING
  2. having关键字专门用来对group by进行指定条件;
  3.  
  4. havingwhere比较:
  5. having:过滤分组,在GROUP BY后执行;
  6. where:过滤行,在GROUP BY前执行;
  7.  
  8. 比如:
  9. 如何获取教授15名以上学名的老师?
  10.  
  11. SELECT teacher_id,count(*)
  12. FROM student
  13. GROUP BY teacher_id
  14. HAVING count(*) > 15;
  15.  
  16. 比如:
  17. 如何获取数学成绩平均分在70分及以上的班级?
  18.  
  19. SELECT
  20. class_id,avg(score)
  21. FROM student
  22. GROUP BY class_id
  23. HAVING avg(score) >= 70;

2、排序分组结果

  1. 比如:
  2. 如何获取每个班级的数学成绩平均分(不计算数学成绩在80分以下的学生),然后以平均分从高到低排序?
  3.  
  4. 使用关键字:GROUP BY + ORDER BY
  5.  
  6. #会先执行where,再进行order by
  7. SELECT
  8. class_id,avg(score)
  9. FROM student
  10. WHERE score > 80
  11. GROUP BY class_id
  12. ORDER BY avg(score) DESC;
  13.  
  14. 如果每次查询都想得到确定的排序结果,则必须使用ORDER BY

3、SELECT子句顺序

最简单的SQL语句:

  1. SELECT 1;

SQL基础-汇总统计及GROUP BY的更多相关文章

  1. sql 基础练习 计算7天各个时间点的总和 group by order mysql一次查询多个表

    SQL 基础练习 -- 创建数据库 CREATE DATABASE school CHARACTER SET UTF8; -- 使用数据库 USE school; -- id: 学生的id -- na ...

  2. Oracle知识梳理(三)操作篇:SQL基础操作汇总

    Oracle知识梳理(三)操作篇:SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式:       CREATE TABLE  table_name ( col_ ...

  3. SQL基础操作汇总

    SQL基础操作汇总 一.表操作 1.表的创建(CREATE TABLE): 基本语句格式:    CREATE TABLE  table_name ( col_name    datatype, -- ...

  4. SQL基础-----DML语句

    之前已经介绍过SQL基础之DDL(数据库定义语言)语句,http://www.cnblogs.com/cxq0017/p/6433938.html(这是地址) 这篇文章主要介绍DML语句(数据库操纵语 ...

  5. 2.Mysql SQL基础

    2.Mysql SQL基础2.1 SQL简介 SQL(Structure Query Language)是结构化查询语言.2.2 SQL使用入门 2.2.1 SQL分类 SQL分为DDL.DML(DQ ...

  6. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  7. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  8. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  9. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

随机推荐

  1. (1)ASP.NET Core 应用启动Startup类简介

    1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax.FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Star ...

  2. Hyper-V虚拟机配置内部网络固定IP 并且连接外网

    2019/10/23 Hyper-V CentOS7 摘要:Hyper-V中的虚拟机CentOS7能固定IP并且连接外网 保证宿主机的Xshell始终只用同一个IP连接到该虚拟机 新建内部网络虚拟交换 ...

  3. Cascader 级联选择器hover选择效果

    官网例子 <div class="block"> <span class="demonstration">hover 触发子菜单< ...

  4. Excel工作表密码保护的破解

    操作步骤:打开Visual Basic编辑器,单击“插入-->模块“,将以下代码粘贴到模块中即可. Sub DelPassword() ActiveSheet.Protect DrawingOb ...

  5. shell EOF 用户自定义终止符

    #!/bin/bash ftp -n << EOF user guest 123456 binary cd /home/ prompt mget * close bye EOF 使用Tab ...

  6. springcloud中gateway的实际应用

    之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...

  7. IDEA下创建Spring项目

    IDEA下创建Java SE Spring项目示例 1.创建项目 第4步:是否自动创建空的Spring容器配置文件,默认文件名是spring-config.xml.勾不勾选都行,如果没勾选,后面要自己 ...

  8. Linux应用与端口

    lsof -i:port --- 得到对应端口的应用pid PS -ef|grep pid --- 根据pid得到对应应用

  9. day 02 作业 预科

    目录 作业 作业 ==1.什么是编程== 通过使用编程语言做一些事情,表达一些自己的想法. ==2.简述计算机五大组成.== 计算机由cpu ,运算器 ,控制器,存储器(外存,内存) 输入设备 输出设 ...

  10. Linux NFS 共享

    通过NFS网络文件系统,可以通过网络共享目录,让网络上的其他主机可以通过挂载访问共享目录的数据. Server 安装相关软件包 [root@server ~]# yum install nfs-uti ...