首页 > 其他分享 >SUM和IF使用求部分和

SUM和IF使用求部分和

时间:2023-01-11 00:01:21浏览次数:33  
标签:GROUP -- SUM WHEN id 使用 部分 class

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加和的结果。

标签:GROUP,--,SUM,WHEN,id,使用,部分,class
From: https://www.cnblogs.com/YaoMa/p/17041368.html

相关文章

  • SAP ABAP Application Log 的使用方法
    SAPABAPApplicationLog的使用场景:(1)当你想记录应用程序的执行进度,以便以后在需要时重建它;(2)当开发人员不确定/无法调试代码(前台/后台)并且想深入了解错误原因时,可......
  • SAP UI5 FlexBox Layout 布局的概念和具体使用案例介绍试读版
    SAPUI5官网提到了所谓FlexBoxLayout布局的概念。文档提到,FlexBox布局可以让SAPUI5界面上的控件充分利用屏幕可用空间,避免空间的浪费或者控件之间出现重叠的现象发......
  • 使用 SAP UI5 3D Viewer 控件显示 3D 模型效果试读版
    借助SAPUI5控件家族提供的3DViewer控件,我们可以直接在浏览器里实现一些基本的3D可视化功能。首先看一看按照本教程的步骤,完成开发后,得到的3D显示效果如何。我......
  • ABAP TEST-SEAM 的使用方法
    语句TEST-SEAM引入了一个称为seam的测试SEAM,它由END-TEST-SEAM关闭。当前程序的测试类(testclass)可以使用语句TEST-INJECTION将语句块statement_block替换为......
  • 使用 SAP CRM Application Enhancement Tool(AET) 创建扩展字段
    本文的英文版,发表在SAP社区wiki上,原文标题:StepbysteptocreatenewfieldsonUIviaApplicationExtensionTool登录SAPCRMWebClientUI,点击Personalization......
  • Grafana 安装及 Windows 应用程序服务配置工具 NSSM使用
    Windows中安装:Grafana安装步骤及下载页面: ​​http://docs.grafana.org/installation/windows/​​NSSM(Non-SuckingServiceManager)下载页面:​​https://nssm.cc/downlo......
  • Vbox安装安卓X86过程及部分注意事项
    因为各种突发情况,鸽了半年...言归正传这两天用Vbox装了个安卓X86,码一下过程,算是为自己记录一下,也帮助其他人少踩点坑。1.下载安卓X86安装包官网(可能需要梯子)https://ww......
  • 小乌龟的安装及使用(码云)
    一、下载小乌龟安装包:https://download.tortoisegit.org/tgit/2.12.0.0/TortoiseGit-2.12.0.0-64bit.msi中文安装包:https://download.tortoisegit.org/tgit/2.13......
  • 消息队列常见的使用场景
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招......
  • R语言使用ARIMAX预测失业率经济时间序列数据|附代码数据
    全文链接:http://tecdat.cn/?p=22521最近我们被客户要求撰写关于ARIMAX的研究报告,包括一些图形和统计输出。在大数据的趋势下,我们经常需要做预测性分析来帮助我们做决定。......