参考网址: https://zhuanlan.zhihu.com/p/245115561

聚合函数是什么

聚合函数是对一组值执行计算,并返回单个值的函数。常与 SELECT 语句的 GROUP BY 子句一同使用。

常见聚合函数有哪些

  1. count():计数,count(列名)不计算空值,count()计入空值
  2. sum():对一列数据求和,必须为数字
  3. avg():对一列数据求均值。值为null时,计算平均值时会忽略带有null值的那一行
  4. min():最小值
  5. max():最大值

聚合函数应用的注意事项

  1. where子句后不能跟聚合函数
  2. having后可用聚合函数进行筛选
  3. 执行的优先顺序为:where > group by > having > order by
  4. 运用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中的聚合函数运用的更多相关文章

  1. SQL中的聚合函数

    聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体的聚合函数如下:1. AVG 返回指定组中的平均值,空值被忽略. 例 ...

  2. SQL Server 自定义聚合函数

    说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等 ...

  3. 【SQL】CLR聚合函数什么鬼

    之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...

  4. SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数

    一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...

  5. 在MongoDB中实现聚合函数 (转)

    随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...

  6. 在MongoDB中实现聚合函数

    在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...

  7. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  8. (转)SQL中的ISNULL函数介绍

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  9. SQL点滴30—SQL中常用的函数

    原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...

随机推荐

  1. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  2. 「CF521E」 Cycling City

    「CF521E」 Cycling City 传送门 首先你能发现这个东西一定是两个环的公共边. 最开始想的是什么如果一个点被访问过三次那它一定是公共边的某一端之类的东西,然后发现被仙人掌叉掉. 然后就 ...

  3. MySQL用B+树(而不是B树)做索引的原因

    众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. B树 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构, ...

  4. 分享一个自己画div的技巧

    分享一个自己画div的技巧 笔者是小白,前端不是很懂.现在想总结下自己画div布局的小技巧和思路. 先对着设计图把div给好好框选出来 我个人觉得这一步是很重要的,要先分析大局,再细节处理.一定要先决 ...

  5. 最大网络流dinic

    初始化flow(最大流量)为INF(极大值),建边(正向弧和反向弧) bfs寻找增广路看看有没有路,顺便进行深度标号.如果没有路直接结束输出flow. 如果有,我们按照深度dfs.dfs时注意在给正向 ...

  6. ThreadLocal(十一)

    一.ThreadLocal源码剖析 ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value).get().remove().先剖析源 ...

  7. selenium定位,操作元素

    1.定位方式 1.id driver.find_element_by_id('username').send_keys('byhy') 2.name driver.find_element_by_na ...

  8. nodejs 文本逐行读写功能的实现

    利用nodejs实现:逐行读写(从一个文件逐行复制到另外一个文件):逐行读取.处理和写入(读取一行,处理后,写入另一个文件) 1.所需要的模块: fs,os,readline 2.具体实现: a. 功 ...

  9. odoo12常用的方法

    2019-09-13 今天是中秋节,星期五 #自定义显示名称 def name_get(self): result = [] for order in self: rec_name = "% ...

  10. 第三篇 -- IDEA 创建Springboot Web项目并用Jmeter测试

    上一节使用Django写的一个接口程序,这一节讲用IDEA配合Springboot创建web项目.一个是python,一个是java. 参考链接:http://www.uxys.com/html/Ja ...