SQL,group by分组后分别计算组内不同值的数量

news2024/12/25 14:44:44
SQL,group by分组后分别计算组内不同值的数量

如现有一张购物表shopping

先要求小明和小红分别买了多少笔和多少橡皮,形成以下格式

SELECT 'name',COUNT(*)
FROM 'shopping'
GROUP BY 'name';

SELECT name AS 姓名,SUM( CASE WHEN cargo = '笔' THEN 1 ELSE 0 END) AS 笔, SUM(CASE WHEN cargo = '橡皮' THEN 1 ELSE 0 END) AS 橡皮 FROM shopping GROUP BY name;

注:这里不能用count计算行数,count只是分组后每组有行的数目

MySQL中case when then else end 的用法

语法:

CASE

                WHEN condition1 THEN result1

                WHEN condition2 THEN result2

                WHEN conditionN THEN resultN

END;

SElECT

                CASE                                                ----------------------------如果

                WHEN sex = '1' THEN '男'                ----------------------------Sex=‘1’,则返回值‘男’

                WHEN sex = '2' THEN '女'                ----------------------------Sex=‘2’,则返回值‘女’

                ELSE 0                                              ----------------------------其他的返回‘其他’

                ND                                                     ----------------------------结束

from        user                                                   ----------------------------整体理解:在user表中如果                                                                                                                 sex=‘1’,则返回值‘男’;如果

                                                                                                           sex=‘2’,则返回值‘女

----用法一:

SELECT 

                CASE 

                WHEN STATE = '1' THEN '成功'

                WHEN STATE = '2' THEN '失败'

                ELSE '其他'

            END

FROM  TABLE

---用法二:

SELECT  STATE

                CASE 

                WHEN  '1' THEN '成功'

                WHEN  '2' THEN '失败'

                ELSE '其他'

            END

FROM  table

案例:有员工表empinfo  employee(员工) 

CREATE TABLE 'EMPINFO' (
    'id' INT(11) NOT NULL AUTO_INCREMENT,
    'name' VARCHAR(10) NOT NULL,
    'age' INT(11) NOT NULL,
    'SALARY' INT(11) NOT NULL,
    PRIMARY KEY('id')
)

 假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人:

salary>9999 and age>35

salary>9999 and age<35

salary<9999 and age>35

salary<9999 and age<35

 每种员工的数量;

SELECT 
    SUM(CASE WHEN salary>9999 AND age>35 THEN 1 ELSE 0 END) AS 'salary>9999 age>35',
    SUM(CASE WHEN salary>9999 AND age<35 THEN 1 ELSE 0 END) AS 'salary>9999 age<35',
     SUM(CASE WHEN salary<9999 AND age>35 THEN 1 ELSE 0 END) AS 'salary<9999 age>35',
     SUM(CASE WHEN salary<9999 AND age<35 THEN 1 ELSE 0 END) AS 'salary<9999 age<35'
FROM empinfo;

 

 练习:用一个sql语句完成下面不同条件的分组

有如下数据:

 

按照国家和性别进行分组,得出如下结果:

SELECT country,

                SUM ( CASE WHEN sex = '1' THEN

                                                   population ELSE 0 END),

                SUM ( CASE WHEN sex = '2' THEN

                                                   popution ELSE 0 END)

FROM Table_A

GROUP BY country;

根据条件有选择的UPDATE。

例,有如下更新条件

工资5000以上的员工,工资减少10%

工资在2000到4600之间的员工,工资增加15%

很容易考虑的是选择执行两次UPDATE语句,如下所示

----条件一:

UPDATE Personnel

        SET salary = salary * 0.9

WHERE salary >= 5000;

----条件二:

UPDATE Personnel

        SET salary = salary*1.15

WHERE salary >= 2000 AND salary < 4600;

但是事情没有想象的那么简单,假设有个人工资5000块。首先,按照条件1,工资减少10%,变成工资4500.接下来运行第二个SQL的时候,因为这个人的工资是4500在2000到4600的范围之内,需要增加15%,最后这个人的工资结果是5175,不但没有减少,反而还增加了。如果反过来执行,那么工资4600的人相反会变成减少工资。暂且不管这个规章是多么荒诞,如果想要一个SQL语句实现这个功能的话,我们需要用到Case函数。代码如下:

UPDATE Personnel

        SET salary = CASE WHEN salary >= 5000 THEN salary * 0.9
                    WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15
        ELSE salary END;

这里要注意一点,最后一行的ELSE salary 是必须的,要是没有这行,不符合这两个条件的人的工资将会被写成NULL,那可就大事不妙了。在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。

update T
set A = case
        when A > 100 then A = A-100
        when A < 100 then A = A+100
        else A end;

SELECT courseid, coursename,score,(CASE WHEN score < 60 THEN 'fail' ELSE 'pass' END) AS mark FROM course

SELECT DISTINCT 工单,制令号 FROM gomgdan

要求统计表gongdan中:工单·+制令号不重复的所有记录的数量

把中间查询到的结果当成一张表使用

SELECT COUNT(*) FROM (SELECT DISTINCT 工单,制令号 FROM gongdan) AS B

SELECT salary FROM employee GROUP BY salary DESC LIMIT 1, 1;

SELECT IFNULL
((SELECT salary FROM employee GROUP BY salary DESC LIMIT 1,1),NULL)
AS SecondHighestSalary;

IFNULL(expr1,expr2)

如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2

拷贝表(拷贝数据,源表名:a  目标表名:b)

SQL:insert into b(a,b,c) select d, e, f from a;

insert into b(a,b,c) select a,b,c from b;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyPy 通过采用即时编译技术,能够显著提升 Python 代码的执行效率。

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 提升 Python 代码性能至接近 C 语言速度&#xff0c;无需修改源代码。遵循 Python 之父吉多・范罗苏姆的建议&#xff1a;“如果你想让你的代码神奇地运行得更快&#xff0c;你应该试试用 PyPy。” Yo…

二维前缀和与二维差分的表示

前缀和&#xff1a; 上述图片是求范围内的总和的图和公式 上述图片是初始化前缀和数组的图和公式 差分&#xff1a; 上图是差分公式 #include<iostream> #include<climits> #include<algorithm> #include<cstring> #include<cstdio> #include&l…

基于视图能力的县域治理视频基座数字化、智慧化解决方案

一、方案背景 县域治理方案是我国地方治理体系的重要组成部分&#xff0c;对于促进县域经济社会发展、维护社会稳定、推进全面深化改革具有重要意义。随着科技的不断进步&#xff0c;视频监管已经成为了现代社会治理的重要手段之一。县域治理视频监管方案是通过视频监控、数据…

SpringBoot国际化配置流程(超详细)

前言 最新第一次在做SpringBoot的国际化&#xff0c;网上搜了很多相关的资料&#xff0c;都是一些简单的使用例子&#xff0c;达不到在实际项目中使用的要求&#xff0c;因此本次将结合查询的资料以及自己的实践整理出SpringBoot配置国际化的流程。 SpringBoot国际化 "i…

关于svn安装报错2503问题的解决方法

问题&#xff1a; SVN在安装时&#xff0c;一直报错&#xff0c;安装失败 The installer has encountered an unexpected error installing this package.The error code is 2503 权限问题&#xff0c;右键以管理员权限运行。如果你也是像我一样&#xff0c;右键没有以管理员…

springboot 使用@profiles.active@多配置文件切换

项目配置文件结构&#xff1a; 主配置文件内容&#xff1a; pom配置文件&#xff1a; <profiles><profile><id>dev</id><properties><profiles.active>dev</profiles.active></properties></profile><profile>…

43 带 fixed 列的 el-table 不兼容于 sortablejs

前言 这是一个基于 sortablejs 来实现的 el-table 的拖拽功能的基础实现 然后 这个过程中遇到的一个比较特殊的问题是, 关于 el-table-column 的 fixed 的属性, 对于 sortablejs 这边来定位目标选择列 影响的一个问题 在基础的用例中, 使用 “.el-table__body-wrapper tbo…

数组的常见算法

数组的常见算法 数值型数组特征值统计 这里的特征值涉及到&#xff1a;平均值、最大值、最小值、总和等 举例1&#xff1a;数组统计&#xff1a;求总和、均值 public class TestArrayElementSum {public static void main(String[] args) {int[] arr {4,5,6,1,9};//求总和、…

污水处理迈入3D可视化新时代:智慧环保触手可及

在科技日新月异的今天&#xff0c;环保事业也迎来了前所未有的发展机遇。污水处理作为环保领域的重要组成部分&#xff0c;其技术的革新与进步&#xff0c;对于保护水资源、维护生态平衡具有重要意义。 传统的污水处理机组往往存在着操作复杂、监控困难等问题&#xff0c;使得污…

2024年【熔化焊接与热切割】报名考试及熔化焊接与热切割模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割报名考试考前必练&#xff01;安全生产模拟考试一点通每个月更新熔化焊接与热切割模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过熔化焊接与热切割作业考试题库很简单。 1、【单选题】…

ORA-04031 错误分析及处理方法

一、问题描述 使用普通用户登录数据库报ORA-04031错误 $ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Mon Mar 25 09:14:59 2024Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Releas…

学点儿Java_Day12_IO流

1 IO介绍以及分类 IO: Input Output 流是一组有顺序的&#xff0c;有起点和终点的字节集合&#xff0c;是对数据传输的总称或抽象。即数据在两设备间的传输称为流&#xff0c;流的本质是数据传输&#xff0c;根据数据传输特性将流抽象为各种类&#xff0c;方便更直观的进行数据…

详细分析Linux中的core dump异常(附 Demo排查)

目录 1. 基本知识2. 进阶知识3. Demo4. 彩蛋 1. 基本知识 Core dump 是指在程序异常终止时&#xff0c;操作系统将程序的内存映像保存到磁盘上的一种机制。 在 Linux 系统中&#xff0c;core dump 提供了一种调试程序错误的重要方式&#xff0c;它记录了程序在崩溃时的内存状态…

文献学习(自备)

收官大作&#xff0c;多组学融合的新套路发NC&#xff01;&#xff01; - 知乎 (zhihu.com) Hofbauer cell function in the term placenta associates with adult cardiovascular and depressive outcomes | Nature Communications 病理性胎盘炎症会增加几种成人疾病的风险&a…

CAD自动轻量化,工业仿真动画快速制作

随着现代工业的蓬勃发展&#xff0c;制造业企业在产品宣传展示、工作流程讲解、机械维修维护等方面对展示形式提出了更高的要求。工业动画以其直观、生动的特点&#xff0c;能够深入剖析产品的结构、工作原理和操作流程&#xff0c;为企业带来了全新的宣传展示方式。 但是由于…

Obsidian插件-高亮块(Admonition)

在插件市场里面搜索Admonition并安装插件&#xff0c;就可以使用高亮块了。 添加高亮块 用法稍微有一些不同。按照下面的格式&#xff0c;输入Markdown就可以创建一个高亮块。 内容内容内容输入*ad-*会出现相应的类型可以选择

【QGIS从shp文件中筛选目标区域导出为shp】

文章目录 1、写在前面2、QGIS将shp文件中目标区域输出为shp2.1、手动点选2.2、高级过滤 3、上述shp完成后&#xff0c;配合python的shp文件&#xff0c;即可凸显研究区域了 1、写在前面 利用shp文件制作研究区域mask&#xff0c;Matlab版本&#xff0c;请点击 Matlab利用shp文…

超分之SwinIR官方代码解读

文章目录 一、解读SwinIR模型文件&#xff1a;network_swinir.py1. 带有相对为位置偏置的(W-MSA)2. STL(Swin Transformer)3. RSTB&#xff08;Residual Swin Transformer Block&#xff09;4. SwinIR&#xff08;主框架网络&#xff09; 二、解读SwinIR测试主文件&#xff1a;…

企业员工培训考试系统开发方案

一、引言 在当今知识经济时代&#xff0c;企业对员工的综合素质和专业技能有着越来越高的要求。为了适应这一趋势&#xff0c;构建一个全面而高效的企业员工培训考试系统变得尤为重要。该系统旨在通过提供多样化的培训课程和全面的考核机制&#xff0c;促进员工持续学习和能力…

结构体,联合体,枚举( 1 )

目录 前言 1.结构体 1.1结构体的声明 1.2结构体变量的创建和初始化 1.3结构体成员的访问字符 1.4结构体的内存大小 1.4.1对齐规则 1.5结构体传参 前言 在编程的世界里&#xff0c;数据结构的选择对于程序的效率和可读性有着至关重要的影响。不同的数据结构适用于不同的…