GROUP BY可以按照某一列的不同值进行分组,然后将不同组的数据可以利用聚合函数进行汇总取值。

--我们可以在老师表里面求解不同班级的老师分别有多少名
SELECT class_id,COUNT(teacher_id)
FROM teacher
GROUP BY class_id;
--我们可以在老师表里面求解每个班级里面最小的年龄和最大的年龄
SELECT class_id,MAX(age),MIN(age)
FROM teacher
GROUP BY class_id;
--我们可以在老师表里面求解每个班级老师们的工资总和
SELECT class_id,SUM(salary)
FROM teacher
GROUP BY class_id;

现在我们考虑一个新的问题,我们想要求解每个班级男老师的人数,正常来讲我们分组利用已有的函数只能汇总全部数据,想要进行部分汇总可以借助于IF函数:IF(condition, value_if_true, value_if_false),这里用下面的例子解释为:如果性别是男,则该行数据返回1,否则,返回0,利用SUM进行汇总就得到了男性的总数量,也就是整体的部分数量。

--我们可以在老师表里面求解每个班级男老师的数目
SELECT class_id,SUM(IF(sex='男',1,0))
FROM teacher
GROUP BY class_id;

Tips1

除了IF函数以外,我们还可以搭配CASE...WEHN...来实现,下面是其两种表达方式:

--第一种表达方式
CASE <单值表达式>
WHEN <表达式值> THEN <SQL语句或返回值>
WHEN <表达式值> THEN <SQL语句或返回值>
...
WHEN <表达式值> THEN <SQL语句或返回值>
ELSE <SQL语句或返回值>
END --第二种表达方式
CASE
WHEN <判断表达式> THEN <SQL语句或返回值>
WHEN <判断表达式> THEN <SQL语句或返回值>
...
WHEN <判断表达式> THEN <SQL语句或返回值>
ELSE <SQL语句或返回值>
END --我们来用这种方式替换前面的IF函数
SELECT class_id,SUM(CASE sex WHEN '男' THEN 1 ELSE 0 END)
FROM teacher
GROUP BY class_id; SELECT class_id,SUM(CASE WHEN sex = '男' THEN 1 ELSE 0 END)
FROM teacher
GROUP BY class_id;

Tips2

上面我们都是采用的SUM来计算,那么这里我们区分一下为什么不用COUNT来计算:COUNT是对结果集的数目进行汇总,SUM是对结果集中的数值进行加和,即使COUNT搭配CASE或者IF函数,结果也是不正确的,因为COUNT计数的是行数,无论里面的数值为0或者1,都会计入,所以这里不能用COUNT,而数值为0或1会影响SUM加和的结果。

SUM和IF使用求部分和的更多相关文章

  1. HDU 3473 Minimum Sum (划分树求区间第k大带求和)(转)

    题意:在区间中找一个数,求出该区间每个数与这个数距离的总和,使其最小 找的数字是中位数(若是偶数个,则中间随便哪个都可)接着找到该区间比此数大的数的总和 区间中位数可以使用划分树,然后在其中记录:每层 ...

  2. 杭电1003 Max Sum 【连续子序列求最大和】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max ...

  3. 杭电 5053 the Sum of Cube(求区间内的立方和)打表法

    Description A range is given, the begin and the end are both integers. You should sum the cube of al ...

  4. Sum Problem

    2018-04-22 19:59:52 Sum系列的问题是Leetcode上的一个很经典的系列题,这里做一个简单的总结. 167. Two Sum II - Input array is sorted ...

  5. LeetCode(307) Range Sum Query - Mutable

    题目 Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclus ...

  6. 练习2-15 求简单交错序列前N项和 (15 分)

    练习2-15 求简单交错序列前N项和 (15 分) 本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格 ...

  7. 练习2-14 求奇数分之一序列前N项和 (15 分)

    练习2-14 求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行 ...

  8. 练习2-13 求N分之一序列前N项和 (15 分)

    练习2-13 求N分之一序列前N项和 (15 分) 输入在一行中给出一个正整数N. 输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位.题目保证计算结果不超过双精度范 ...

  9. UVALive 4682 XOR Sum (trie)

    题意:求一段连续的数字使得它们的异或和最大. 思路:首先利用前缀和求sum[i],这样求某段连续数字异或和最大就是求某两个j和i满足sum[i]^sum[j-1]最大,问题就变成了找两个数的异或最大. ...

  10. POJ 1060 Modular multiplication of polynomials(多项式的加减乘除,除法转化成减法来求)

    题意:给出f(x),g(x),h(x)的 (最高次幂+1)的值,以及它们的各项系数,求f(x)*g(x)/h(x)的余数. 这里多项式的系数只有1或0,因为题目要求:这里多项式的加减法是将系数相加/减 ...

随机推荐

  1. 领域驱动设计(DDD)实践之路(二):事件驱动与CQRS

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/Z3uJhxJGDif3qN5OlE_woA作者:wenbo zhang [领域驱动设计实践之 ...

  2. 入门篇-其之七-Java运算符(下)

    一.三元运算符的使用 三元运算符(也称作三目运算符),使用:和?表示,其格式为:布尔表达式 ? 表达式1 : 表达式2 如果布尔表达式的计算结果是true,那么执行表达式1:否则,如果布尔表达式的计算 ...

  3. java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历

    本文为博主原创,转载请注明出处: 目录: 一.快速理解前序,中序,后序遍历的区别 二.使用递归的方式实现前序,中序,后序遍历 三. 使用迭代的方式实现前序 中序 后序遍历 四.层序遍历 一.快速理解前 ...

  4. 2023强网拟态crypto-一眼看出

    1.题目信息 一眼看穿 查看代码  from Crypto.Util.number import * from secret import flag import gmpy2 flag=b'' r = ...

  5. [转帖]Oracle中unicode的几种不同字符编码模式

    https://zhuanlan.zhihu.com/p/668340691#   在Oracle中unicode字符集中,存在以下几种不同unicode字符集的编码模式 AL32UTF8 UTF8 ...

  6. [转帖]新版 Elasticsearch 中的强悍插件 X-pack

    https://zhuanlan.zhihu.com/p/36337697   3 人赞同了该文章 作者:Alan 岂安科技运维工程师努力踏上一条为后人留坑的运维之路.(逃 1 前言 Elk 日志可视 ...

  7. [转帖] 记一次使用gdb诊断gc问题全过程

    记一次使用gdb诊断gc问题全过程   原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章<G ...

  8. [转帖]linux性能优化-CPU利用率

    参数说明 /proc/stat提供系统的CPU和任务统计信息. user(us): 用户态CPU时间,不包括下面的nice时间,但包括了guest时间. nice(ni): 代表低优先级用户态CPU时 ...

  9. [转帖]发布即巅峰!万字长文:Java性能调优六大工具:MAT内存分析工具

    jianshu.com/p/4ed3dd8b7b83 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基 ...

  10. [转帖]linux中top命令显示不全怎么解决

    https://www.yisu.com/zixun/697775.html 这篇"linux中top命令显示不全怎么解决"文章的知识点大部分人都不太理解,所以小编给大家总结了以下 ...