iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么在MySQL中使用sum、case和when优化统计查询
  • 324
分享到

怎么在MySQL中使用sum、case和when优化统计查询

2023-06-14 06:06:54 324人浏览 八月长安
摘要

怎么在MySQL中使用sum、case和when优化统计查询?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。表结构如下:CREATE TABLE&nbs

怎么在MySQL中使用sum、case和when优化统计查询?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

表结构如下:

CREATE TABLE `statistic_order` ( `oid` bigint(20) NOT NULL, `o_source` varchar(25) DEFAULT NULL COMMENT '来源编号', `o_actno` varchar(30) DEFAULT NULL COMMENT '活动编号', `o_actname` varchar(100) DEFAULT NULL COMMENT '参与活动名称', `o_n_channel` int(2) DEFAULT NULL COMMENT '商城平台', `o_clue` varchar(25) DEFAULT NULL COMMENT '线索分类', `o_star_level` varchar(25) DEFAULT NULL COMMENT '订单星级', `o_saledep` varchar(30) DEFAULT NULL COMMENT '营销部', `o_style` varchar(30) DEFAULT NULL COMMENT '车型', `o_status` int(2) DEFAULT NULL COMMENT '订单状态', `syctime_day` varchar(15) DEFAULT NULL COMMENT '按天格式化日期', PRIMARY KEY (`oid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

项目需求是这样的:

统计某段时间范围内每天的来源编号数量,其中来源编号对应数据表中的o_source字段,字段值可能为CDE,SDE,PDE,CSE,SSE。

怎么在MySQL中使用sum、case和when优化统计查询

来源分类随时间流动

一开始写了这样一段sql

select S.syctime_day, (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CDE', (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SDE', (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'PDE', (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CSE', (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SSE' from statistic_order S where S.syctime_day > '2016-05-01' and S.syctime_day < '2016-08-01'  GROUP BY S.syctime_day order by S.syctime_day asc;

这种写法采用了子查询的方式,在没有加索引的情况下,55万条数据执行这句SQL,在workbench下等待了将近十分钟,最后报了一个连接中断,通过explain解释器可以看到SQL的执行计划如下:

怎么在MySQL中使用sum、case和when优化统计查询

每一个查询都进行了全表扫描,五个子查询DEPENDENT SUBQUERY说明依赖于外部查询,这种查询机制是先进行外部查询,查询出group by后的日期结果,然后子查询分别查询对应的日期中CDE,SDE等的数量,其效率可想而知。

在o_source和syctime_day上加上索引之后,效率提高了很多,大概五秒钟就查询出了结果:

怎么在MySQL中使用sum、case和when优化统计查询

查看执行计划发现扫描的行数减少了很多,不再进行全表扫描了:

怎么在MySQL中使用sum、case和when优化统计查询

这当然还不够快,如果当数据量达到百万级别的话,查询速度肯定是不能容忍的。一直在想有没有一种办法,能否直接遍历一次就查询出所有的结果,类似于遍历java中的list集合,遇到某个条件就计数一次,这样进行一次全表扫描就可以查询出结果集,结果索引,效率应该会很高。在老大的指引下,利用sum聚合函数,加上case...when...then...这种“陌生”的用法,有效的解决了这个问题。
具体SQL如下:

 select S.syctime_day, sum(case when S.o_source = 'CDE' then 1 else 0 end) as 'CDE', sum(case when S.o_source = 'SDE' then 1 else 0 end) as 'SDE', sum(case when S.o_source = 'PDE' then 1 else 0 end) as 'PDE', sum(case when S.o_source = 'CSE' then 1 else 0 end) as 'CSE', sum(case when S.o_source = 'SSE' then 1 else 0 end) as 'SSE' from statistic_order S where S.syctime_day > '2015-05-01' and S.syctime_day < '2016-08-01'  GROUP BY S.syctime_day order by S.syctime_day asc;

关于Mysql中case...when...then的用法就不做过多的解释了,这条SQL很容易理解,先对一条一条记录进行遍历,group by对日期进行了分类,sum聚合函数对某个日期的值进行求和,重点就在于case...when...then对sum的求和巧妙的加入了条件,当o_source = 'CDE'的时候,计数为1,否则为0;当o_source='SDE'的时候......

这条语句的执行只花了一秒多,对于五十多万的数据进行这样一个维度的统计还是比较理想的。

怎么在MySQL中使用sum、case和when优化统计查询

通过执行计划发现,虽然扫描的行数变多了,但是只进行了一次全表扫描,而且是SIMPLE简单查询,所以执行效率自然就高了:

怎么在MySQL中使用sum、case和when优化统计查询

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么在MySQL中使用sum、case和when优化统计查询

本文链接: https://www.lsjlt.com/news/268447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在MySQL中使用sum、case和when优化统计查询
    怎么在MySQL中使用sum、case和when优化统计查询?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。表结构如下:CREATE TABLE&nbs...
    99+
    2023-06-14
  • MySQL巧用sum、case和when优化统计查询
    最近在公司做项目,涉及到开发统计报表相关的任务,由于数据量相对较多,之前写的查询语句查询五十万条数据大概需要十秒左右的样子,后来经过老大的指点利用sum,case...when......
    99+
    2024-04-02
  • 按月、日统计查询数据SQL、以及case when的使用 -- postgresql、MySQL
    目录 获取每月最新一条数据及case when的使用,以及其他(数据类型转换、分页)等使用 - postgresql根据月份分组、创建时间排序,获取排序后的第一条数据。即获取每月最新一条数据 ...
    99+
    2023-09-02
    postgresql sql
  • 怎么在mysql中优化查询
    这篇文章给大家介绍怎么在mysql中优化查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、减少请求的数据量。只回到必要的列:最好不要使用SELECT*语言。只返回必要的行:使用LIMIT语言限制返回的数据。缓存重复...
    99+
    2023-06-15
  • MySQL如何在查询中使用CASE语句
    在MySQL中,可以使用CASE语句在查询中根据条件进行判断并返回不同的值。语法如下: SELECT CASE ...
    99+
    2024-04-09
    MySQL
  • 怎么在MySQL中对查询进行优化
    本篇文章给大家分享的是有关怎么在MySQL中对查询进行优化,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、创建索引规范在学习索引优化之前,需要对创建索引的规范有一定的了解,此...
    99+
    2023-06-08
  • MySQL中怎么优化limit查询
    今天就跟大家聊聊有关MySQL中怎么优化limit查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  同样是取10条数据select&n...
    99+
    2024-04-02
  • MySQL中的查询优化器怎么用
    本篇内容主要讲解“MySQL中的查询优化器怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的查询优化器怎么用”吧!对于一个SQL语句,查询优化器...
    99+
    2024-04-02
  • MySQL中怎么优化查询分页
    这期内容当中小编将会给大家带来有关MySQL中怎么优化查询分页,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  MySQL查询分页怎么优化  如果你的数据量有几十万条,用...
    99+
    2024-04-02
  • MySQL中怎么优化查询性能
    MySQL中怎么优化查询性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WHERE条件字段使用函数假设我们有如下创建表的语句mysq...
    99+
    2024-04-02
  • MySQL中怎么优化分页查询
    今天就跟大家聊聊有关MySQL中怎么优化分页查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 分页查询方法:在MySQL中,分页查询一般...
    99+
    2024-04-02
  • MySQL中怎么优化查询语句
    这篇文章将为大家详细讲解有关MySQL中怎么优化查询语句,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  MySQL常用30种SQL查询语句优化方法  1、...
    99+
    2024-04-02
  • 使用MySQL中的EXPLAIN进行查询优化
    MySQL中EXPLAIN的用法及具体代码示例 一、介绍 在MySQL中,EXPLAIN是一个很有用的工具,用于分析查询语句的执行计划。它可以帮助我们了解MySQL是如何处理查询,以及...
    99+
    2024-02-22
    mysql sql优化
  • MySQL中怎么优化SQL查询语句
    这期内容当中小编将会给大家带来有关MySQL中怎么优化SQL查询语句,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、应尽量避免在 where 子句中使用!=或...
    99+
    2024-04-02
  • 在AmazonAurora中如何优化查询性能和执行计划
    要在Amazon Aurora中优化查询性能和执行计划,可以尝试以下一些方法: 使用合适的索引:确保在数据库表中使用适当的索引来...
    99+
    2024-04-02
  • 怎么在mysql中根据索引优化查询速度
    这篇文章将为大家详细讲解有关怎么在mysql中根据索引优化查询速度,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。(一)索引的作用索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索...
    99+
    2023-06-14
  • 怎么在mysql中优化百万级数据表的查询
    怎么在mysql中优化百万级数据表的查询?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.两种查询引擎查询速度(myIsam 引擎 )InnoDB 中不保存表的...
    99+
    2023-06-15
  • MySQL数据库中怎么优化索引查询
    这篇文章给大家介绍MySQL数据库中怎么优化索引查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。问题描述:我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_i...
    99+
    2024-04-02
  • PostgreSQL中怎么进行性能调优和查询优化
    在 PostgreSQL 中进行性能调优和查询优化可以通过以下几种方式来实现: 使用合适的索引:创建索引可以加速查询操作,尤其是对...
    99+
    2024-03-12
    PostgreSQL
  • 如何在PHP开发中优化SQL查询语句和索引使用?
    如何在PHP开发中优化SQL查询语句和索引使用?在PHP开发中,数据库查询是非常常见的操作。然而,当数据量增大时,查询性能可能受到影响,导致应用程序变慢。为了提高查询性能,我们需要优化SQL查询语句和索引的使用。本文将介绍一些优化技巧和最佳...
    99+
    2023-11-02
    PHP优化 SQL查询 索引使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作