1、MySQL及sum case when统计实战讲解

MySQL统计求和,当SUM遇到CASE WHEN 在MySQL中我们经常会遇到统计求和的情况,在不分组的情况下要如何去写?当SUM遇到CASE WHEN的场景我们又需要怎么去写呢? 阅读详情

MySQL中使用sum case when统计实战讲解

1、场景:

车险,分组织统计某一时间段内报价的车辆数、出单数、出单保费金额、A端出单数、B端出单数

2、涉及表:

  • 报价订单表

  • 组织机构表

  • 车辆信息表

    建表语句如下

  • 报价订单表

create table y_quote_order
(
    id                      bigint auto_increment comment 'id'
        primary key,
    batch_no                varchar(150) default ''                not null comment '报价批次号,若为批量报价,此字段存报价批次号',
    order_no                varchar(150) default ''                not null comment '报价订单号',
    total_premium           decimal(18, 2)                         null comment '保费+服务包费',
    auto_id                 bigint                                 not null comment '车辆信息',
    status                  tinyint(2)                             not null comment '状态',
    create_time             datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    update_time             datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    product_premium         decimal(18, 2)                         null comment '商品金额',
    total_insurance_premium decimal(18, 2)                         null comment '总车险保费',
    non_auto_premium decimal(18, 2)                                null comment '非车险保费',
    client_type             int                                    null comment '业务入口 1-C端,2-A端',
    organization_id         bigint       default 0                 not null comment '组织机构id'
)
    comment '报价订单表';

create index idx_organization_id
    on quote_order (organization_id)
    comment '组织机构id'; 
  • 组织机构表

create table y_organization
(
    id          bigint auto_increment comment 'id'
        primary key,
    name        varchar(100) default ''                not null comment '名称',
    code        varchar(45)  default ''                null comment '编码',
    short_code  varchar(20)                            null comment '顶级组织简称',
    short_name  varchar(45)  default ''                not null comment '简称',
    level       int                                    null comment '层级',
    parent_code varchar(45)  default '0'               not null comment '组织code',
    operator    varchar(50)  default ''                not null comment '操作人',
    create_time datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    update_time datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    constraint uniq_short_name
        unique (short_name)
)
    comment '组织机构表';

  • 车辆信息表

create table y_auto
(
    id                   bigint auto_increment comment 'id'
        primary key,
    license_plate_no     varchar(45)                          null comment '车牌号',
    owner                varchar(45)                          not null comment '车主姓名',
    vin_no               varchar(45)                          not null comment '车架号/车辆识别代码'
)
    comment '车辆信息表';

create index idx_vin_no
    on auto (vin_no)
    comment '车架号';

3、实际SQL

SELECT
    SUM( CASE WHEN qo.status = 10 THEN qo.total_insurance_premium ELSE 0 END ) AS totalPremium,
    SUM( CASE WHEN qo.status = 10 THEN qo.non_auto_premium ELSE 0 END) AS nonAutoPremium,
    (SELECT LEFT ( m.code, 6 ) ) AS oneLevelCode,
    SUM( CASE WHEN qo.client_type = 1 AND qo.status = 10 THEN 1 ELSE 0 END ) AS issueC,
    SUM( CASE WHEN qo.client_type = 2 AND qo.status = 10 THEN 1 ELSE 0 END ) AS issueA,
    SUM( CASE WHEN qo.status = 10 THEN 1 ELSE 0 END ) AS issueCount,
    count(DISTINCT CASE WHEN qo.status != 1 THEN a.vin_no ELSE null END) AS quoteCarNumber
FROM y_quote_order qo
         JOIN y_organization m ON m.id = qo.organization_id
         JOIN y_auto a ON a.id = qo.auto_id
WHERE qo.create_time BETWEEN '2021-05-01' AND '2022-09-14'
  AND m.level != 0
  and substr( m.code, 1, 6) not in (select mm.code from y_organization mm where m.level=1 and m.short_code in ('cctest','cheche'))
GROUP BY ( SELECT LEFT ( m.code, 6 ) )
ORDER BY totalPremium DESC;

说明:

qo.status = 10 承保完成;

qo.status = 1 暂存;

m.code 一级组织code为6位;

client_type = 2 A端;

client_type = 1 C端。

4、语法说明

  • sum() 聚合求和函数;

  • count()聚合统计函数;

  • distinct 去重;

  • as 后面跟别名;

  • between … and … 范围;

  • join … on … 连表查询;

  • substr(字段名 ,1, 6)截取字符串前六位;

  • select left (字段名, 6) 截取字符串前六位;

  • in() 多参数;

  • group by 分组;

  • order by 排序 (DESC–降序, ASC-- 升序);

  • case when … then … else … end 当满足时 ,这样,不满足那样;

    5、case when … then … else … end 说明

    示例:统计A、C两端销售额:

    SELECT  
    	SUM( CASE WHEN qo.client_type = 1 THEN 1 ELSE 0 END ) AS issueC,
        SUM( CASE WHEN qo.client_type = 2 THEN 1 ELSE 0 END ) AS issueA,
    from y_quote_order qo
    where qo.status = 10;
    
    

    总结:

    常用于同一纬度不同阶段数据的统计,条件不能放在where后面是,便可使用case when … then … else … end。

mysql 行转列 case when mysql 行转列 case when max sum 阅读详情

相关推荐

【MYSQL学习】MySQL查询进阶:CASE语句的5大妙用你GET到了吗?

通过以上介绍,相信你对CASE语句的5大妙用有了更加全面的理解。从CASE语句的基本概念到使用场景、注意事项和高级用法,每个知识点都在编写复杂查询时发挥着重要作用。记住,理论知识是基础,实践才是检验真理的唯一标准。多动手尝试,你会发现自己在不知不觉中已经成为了MySQL高手!

java专栏 1203

mysql中使用case when 和sum()配合统计

先知道一下常用语法:sum(case 属性名 when 属性值1 then 1 else 0 end),意思就是某个属性下为属性值1就加1个数量,否则就作0统计。 题目: 查询各科成绩最高分、最低分和平均分,以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率(及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90)。 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 select c.ci.

够浪 1万+

Win11 24H2共享访问被禁?深入聊聊SMB签名和‘不安全的来宾登录’那点事

本文深入解析Win11 24H2共享访问故障,探讨SMB签名的安全机制与‘不安全的来宾登录’问题。提供从注册表修改到组策略配置的多层次解决方案,特别针对家庭网络和打印机共享场景给出实用建议,帮助用户在安全与便利之间找到平衡。

weixin_42556197的博客 568

mysql case when 和sum()组合统计

sum(case 属性名 when 属性值1 then 1 else 0 end),意思就是某个属性下为属性值1就加1个数量,否则就作0统计。这里的case when使用当达到条件时就给1,外面有个sum来加起来,如果外面没有sum没法计数,这样就可以获取总人数.

qq_35484657的博客 2376

​​WPF入门与XAML基础:从零开始构建你的第一个WPF应用​

本文是WPF入门系列首篇,详细介绍WPF的核心优势与开发环境搭建。通过创建第一个WPF项目,解析MainWindow.xaml和App.xaml等关键文件,深入讲解XAML基础语法,包括属性赋值、命名空间和事件绑定。最后通过按钮点击交互示例演示WPF应用程序运行流程,帮助开发者快速上手WPF开发,为后续学习布局系统和数据绑定等高级主题奠定基础。

Hare的博客 3301

FFmpeg + OBS 低延迟直播串流实战:从H264裸流到RTP组播的完整配置

本文详细介绍了如何利用FFmpeg将H264裸流转码为RTP协议,并通过组播技术实现与OBS客户端的超低延迟直播串流。文章深入剖析了FFmpeg关键参数调优、SDP文件生成与配置,以及OBS客户端的无缝拉流方法,为需要毫秒级实时交互的场景提供了一套去中心化、高效稳定的完整解决方案。

fanta的博客 830

mysql case when用法

SQL之CASE WHEN用法详解CASE When的用法

pscool的博客 5482

ADRV9026初始化避坑指南:手把手调试PostMcsInit常见故障

本文详细解析了ADRV9026多片同步初始化过程中的PostMcsInit常见故障,包括时钟校准失败、JESD链路建立问题和ARM核通信异常等。通过实际项目经验,提供了硬件检查清单、软件配置要点和分层诊断方法,帮助工程师快速定位和解决问题,提升系统稳定性。

hadoop5ranger的博客 621

MySQL-练习-数据汇总-CASE WHEN

需求:我们要在报表中显示每种产品的库存量,但我们不想简单地将“ units_in_stock”列放在报表中。SELECTCASE上面的SQL查询结果中,我们创建了一个新列, 通过CASE WHEN语句来对这一列赋值CASE WHEN语法上面的查询中,通过列的值来判断库存的可用性库存大于100 的可用性为高(high)50到100的可用性为中等(moderate)小于50的为低(low)零库存 为 (none)

weixin_45862390的博客 5390

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 3万+

【虚幻引擎UE】UE5 可编辑动态样条线轨迹及AI跟随路径移动(含工程源码)

【虚幻引擎UE】可编辑动态样条线轨迹及AI跟随路径移动

灵境引路人 6228

MySQL case when 用法

FF6633 橙色 FF6600 ,蓝色 009999 00CCCC 33CCCC,绿色 33CC00 00CC00 33FF33 红色 CC0000 FF3300 993300 3300CC 6600CC 9966FF 0000FF 0033CC #660099 CC33CC CC6699 CC0033 CC3366    空格 <font color=></font>   #caa4df

qq_43612779的博客 531

AI Agent在智能广告投放中的应用

随着互联网的快速发展,广告投放市场变得越来越复杂和竞争激烈。传统的广告投放方式往往难以精准地触达目标受众,导致广告资源的浪费。AI Agent作为一种智能的自动化程序,能够在复杂的环境中自主学习、决策和执行任务。本文章的目的在于深入探讨AI Agent在智能广告投放中的应用,研究如何利用AI Agent提高广告投放的精准度、效率和效果,降低成本。范围涵盖了AI Agent的基本原理、相关算法、在广告投放中的具体应用场景以及实际案例分析等方面。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 621
上一篇: 自定义注解之防刷新(重复提交)(一)
下一篇: 3、MongoDB实战使用记录
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白de成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值