博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL基础-汇总统计及GROUP BY
阅读量:5220 次
发布时间:2019-06-14

本文共 2507 字,大约阅读时间需要 8 分钟。

一、汇总统计

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 studentGROUP BY teacher_id;

二、汇总统计

1、过滤分组结果

关键字:GROUP BY + HAVINGhaving关键字专门用来对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;

转载于:https://www.cnblogs.com/weiyiming007/p/11430384.html

你可能感兴趣的文章
计算方法 读书笔记
查看>>
css3之 media query 使用(转)
查看>>
【单源最短路模板】 poj 2387
查看>>
思想总结
查看>>
BZOJ 1012 洛谷1198 最大数 maxnumber
查看>>
如何提升程序员的工作效率?
查看>>
html学习笔记(2)-字母大小写转换练习
查看>>
Outlook-----use cached exchange mode在注册表中的值
查看>>
Java中跳出for循环的方法
查看>>
poj 1904 强连通分量
查看>>
如何使用异常处理
查看>>
HelloWorld入门代码
查看>>
handler四元素
查看>>
APT软件包管理-在线安装
查看>>
BitmapShader填充图形
查看>>
With great power comes great responsibility
查看>>
Celery分布式任务
查看>>
微信小程序iPhone X空白兼容
查看>>
luogu 3380
查看>>
基本类型 和 引用类型的区别(值传递和引用传递)
查看>>