SQL中的聚合函数运用
参考网址: https://zhuanlan.zhihu.com/p/245115561
聚合函数是什么
聚合函数是对一组值执行计算,并返回单个值的函数。常与 SELECT 语句的 GROUP BY 子句一同使用。
常见聚合函数有哪些
- count():计数,count(列名)不计算空值,count()计入空值
- sum():对一列数据求和,必须为数字
- avg():对一列数据求均值。值为null时,计算平均值时会忽略带有null值的那一行
- min():最小值
- max():最大值
聚合函数应用的注意事项
- where子句后不能跟聚合函数
- having后可用聚合函数进行筛选
- 执行的优先顺序为:where > group by > having > order by
- 运用group by之后,select中返回的字段只能出现聚合字段(或与之对应的唯一值)和聚合函数。举个栗子:有学号、性别、年龄3个字段,如果group by性别,则只能返回性别及其相关聚合函数,如果返回年龄或者学号,则只会返回1行,往往和实际需求不符
聚合函数练习题
拿到SQL题目后,解题可分为3步(根据难易程度可进行省略):
- 翻译成大白话
- 写出分析思路
- 写出对应的sql子句
world 表格
1、计算世界总人口
分析思路:“总人口”是所有人口相加,用sum函数
SELECT SUM(population)
FROM world
2、列出所有的洲名, 每个只有一次
大白话:表中洲去重后的名称列出来
分析思路:用distinct
SELECT DISTINCT continent
FROM world
3、找出非洲(Africa)的GDP总和
分析思路:先找出非洲(where),再求和GDP(sum)
SELECT SUM(gdp)
FROM world
WHERE continent = 'Africa'
4、有多少个国家面积大于一百万
分析思路:先筛选出面积大于一百万的国家(where),再对这些国家进行计数(count)
SELECT count(name)
FROM world
WHERE area > 1000000
5、“法国”,“德国”,“西班牙”的總人口是多少?
分析思路:先筛选出法国”,“德国”,“西班牙”(where),再对这些国家人口进行求和(sum)
SELECT sum(population)
FROM world
WHERE name in ('France','Germany','Spain')
6、对每一个洲,展示洲份和国家的数量
分析思路:对洲进行分组(group by),然后对每组国家数量进行计数(count)
SELECT continent, count(name)
FROM world
GROUP BY continent
7、对每一个洲,展示洲份和至少有1000万人口国家的数目
分析思路:先筛选出有1000万人口的国家(where),然后对洲进行分组(group by),最后给出计数结果(count)
SELECT continent, count(name)
FROM world
WHERE population >= 10000000
GROUP BY continent
注意:这里筛选1000万人口不能用having来完成,因为人口不是分组字段(continent才是),这是我最开始刷题时常常混淆的地方(指where和having)
8、列出有至少1亿人口的洲
分析思路:先对洲进行分组(group by),然后计算每个洲的人口总和(sum),最后筛选出有1亿人口的洲(having)
SELECT continent
FROM world
GROUP BY continent
HAVING SUM(population) >= 100000000
SQL中的聚合函数运用的更多相关文章
- SQL中的聚合函数
聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体的聚合函数如下:1. AVG 返回指定组中的平均值,空值被忽略. 例 ...
- SQL Server 自定义聚合函数
说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等 ...
- 【SQL】CLR聚合函数什么鬼
之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...
- SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数
一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...
- 在MongoDB中实现聚合函数 (转)
随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...
- 在MongoDB中实现聚合函数
在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...
- (转)SQL中的ISNULL函数介绍
SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...
- (转)SQL中的ISNULL函数介绍
SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...
- SQL点滴30—SQL中常用的函数
原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...
随机推荐
- 题解 guP1948 【[USACO08JAN]电话线Telephone Lines】
二分+dij题目 首先读一遍题目,一定要仔细读(不要问我为什么,我就是受害者qwq 你会发现最终的费用是由最长的电话线决定的,而非电话线长度和. 至此就有了一个基本思路--枚举(二分)出可能的最长电话 ...
- Java中为什么notify()可能导致死锁,而notifyAll()则不会(针对生产者-消费者模式)
1.先说两个概念:锁池 和 等待池 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线 ...
- MYSQL 连接举例
内连接:连接的多个数据必须存在才能连接select * from sjh14482条记录 create table sjha as ( select * from sjh1 limit 20 )sel ...
- vscode搭建python环境
这两天刚下了一个pycharm,结果使用之后将vscode给崩了,重装的时候有些步骤也记不清,走了一些弯路,做个总结来记录一下(本人觉得vscode比pycharm好用一点). Python下载安装 ...
- vlc+flv.js 摄像头 H5 直播
背景 业务需求:用最短的时间搞定摄像头直播到Web页面.因为没有过这方面经验,所以走了很多弯路,其实也不算弯路吧,大部分时间花在学习基础概念,寻找快速方案中.惯性思维想当然的以为找组件,配地址就能搞定 ...
- lucene Hello World
一个lucene创建索引和查找索引的样例: 创建索引: public class Indexer { private IndexWriter indexWriter; /** * 构造器实例化inde ...
- Linux从入门到进阶全集——【第十五集:安装apache服务器】
1,查看是否安装了httpd软件包以及其依赖:rpm -qa httpd(rpm -qa | grep httpd),如果没有输出任何信息,表示你没有安装httpd软件包,如果有输出一般是已经安装了: ...
- 解决proto文件转换时提示“Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it. ”
前言: 想将.proto文件转换成.pb文件时一直报错,一开始以为是文件编码格式的问题,后来将文件改成windows下的utf-8格式后,又出现了新的报错(见下图).百度了很久,才找到解决方法. &q ...
- 解决:CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
log4j给出的异常信息有下面几句: Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC C ...
- DC-7 靶机渗透测试
DC-7 渗透测试 冲冲冲,好好学习 .对管道符的理解加深了好多.最后提权时,遇到了点麻烦.想不懂一条命令为啥能执行生效,耗了一整天才算解决掉. 操作机:kali 172.66.66.129 靶机:D ...