mysql统计所有分类下的数量,没有的也要展示

这篇具有很好参考价值的文章主要介绍了mysql统计所有分类下的数量,没有的也要展示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要求统计所有分类下的数量,如果分类下没有对应的数据也要展示。这种问题在日常的开发中很常见,每次写每次忘,所以在此记录下。

这种统计往往不能直接group by,因为有些类别可能没有对应的数据

这里有两个思路(如果您有更好的方法,请一定要告诉我,求求了):

  1. 每种类型分别统计,用union 连接(比较适合类型已知、不多且确定的)

    过UNION操作符组合了三个独立的查询,每个查询都基于数据表计算了不同条件下的数量,简单粗暴,但不是很推荐

    SELECT `status` `key`,COUNT(id) amount FROM 数据表 WHERE `status` IS NULL
    UNION 
    SELECT 1 `key`,COUNT(id) amount FROM 数据表  WHERE `status` = 1
    UNION 
    SELECT 2 `key`,COUNT(id) amount FROM 数据表 WHERE `status` = 2
    UNION 
    SELECT 3 `key`,COUNT(id) amount FROM 数据表  WHERE `status` = 3
    

    优化(枚举类型,left join数据表):

    SELECT
    	a.`key`,
    	IFNULL( b.amount, 0 ) amount 
    FROM
    	( SELECT 1 AS `key` UNION SELECT 2 UNION SELECT 3 ) AS a
    LEFT JOIN ( SELECT `status` `key`, COUNT( id ) amount FROM 数据表 GROUP BY `status` ) AS b ON a.`key` = b.`key`
    

    性能分析:
    第一个SQL语句进行了多次全表扫描(假设索引未覆盖status字段)。这种做法可能导致更多的磁盘I/O操作,尤其是当数据量较大时,性能开销会较高。

    第二个SQL语句仅对device_patrol_task_record表进行了一次扫描,并利用了GROUP BY进行聚合操作,减少了磁盘I/O,理论上在大多数情况下比第一个SQL更高效。

    结论

    第二个SQL语句在性能和耗时上通常优于第一个SQL语句,因为它只需要遍历表一次,并对结果进行一次性聚合,避免了多次全表扫描带来的性能损失。

    若status字段上有索引,第二个SQL的优势会更加明显,因为可以利用索引加速查询过程。

  2. 先查类型表,left join数据表,最后对left join后的数据再进行分组,注意:要给右表(数据表)为空时判断

    和第一个的优化版思路是一样的文章来源地址https://www.toymoban.com/news/detail-843990.html

    SELECT
    	a.id `key`,
    	a.classify_name `name`,
    	COUNT(b.id) `count`
    FROM
    	分类表 a
    LEFT JOIN 数据表 b ON b.`level` = a.id
    GROUP BY a.id
    

到了这里,关于mysql统计所有分类下的数量,没有的也要展示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【git】个人代码统计数量

    1.查看git上的个人代码量 修改名称为自己的名称 2.统计某段时间个人的代码量 时间段修改为自己需要查看的时间段,author修改为自己的名称 3.统计某个时间段所有人的代码量 4.统计每个人的增删行数 5.查看仓库提交者排名前5 6.参数说明

    2024年02月05日
    浏览(40)
  • ES统计分组后的分组数量

    工作中遇到需要统计分组数量的查询,记录一下 ps: 按区域分组, 统计有几个区域 结果

    2024年02月07日
    浏览(52)
  • Linux 统计目录下文件数量的方法

    1、统计当前目录下文件的个数(不包括目录) 2、统计当前目录下文件的个数(包括子目录) 3、查看某目录下文件夹(目录)的个数(包括子目录) 4、统计当前文件夹下叫某某的文件的数量 5、统计当前文件夹下指定类型的文件的数量 例如这里需要找 js 文件的数量:

    2024年02月13日
    浏览(50)
  • Linux中文件大小查看和数量统计

    在 Linux 中,有多种命令可以查看磁盘分区情况,其中常用的命令如下: 命令 说明 lsblk 该命令用于显示所有块设备,包括磁盘和它们的分区。执行该命令后,会列出所有磁盘的设备名、磁盘大小、分区情况等信息 df -h 该命令用于查看所有已经挂载的文件系统的使用情况。执

    2024年02月16日
    浏览(41)
  • Linux 统计文件数量:多种方法全面掌握

    你是否想过在 Linux 系统中如何快速地统计某个目录下文件的数量?作为 Linux 用户,这是一个很常见的需求。无论是进行系统维护,还是管理文件,我们都需要掌握这个技能。在本文中,我们将向你介绍多种不同的方法来实现这个目标。 统计目录中的文件数量 统计目录中文件

    2024年02月16日
    浏览(46)
  • qt实现不定数量的按钮向前向后移动展示

    此文主要记录用qt实现按钮的移动,具体效果如下: 模拟按钮移动效果 本文记录了三种实现方式。 思路 用动态数组vector存放创建的按钮QPushButton的指针,使用两个同类型的二级指针QPushButton来指向数组中的元素,初始状态下,首尾指针都指向数组中第一个元素,随着界面初始

    2024年04月27日
    浏览(32)
  • 文件夹下的mp4文件数量

    如果您当前已经位于 “2M_val” 文件夹下,您只需执行以下命令即可查看该文件夹中的 .mp4 文件数量: 这个命令会使用 ls 列出当前文件夹中所有的 .mp4 文件,并通过 wc -l 命令计算行数,从而得到 .mp4 文件的数量。执行命令后,会立即输出 .mp4 文件的数量。 解释一下命令中使

    2024年02月10日
    浏览(58)
  • Elasticsearch 查询和聚合查询:基本语法和统计数量

    摘要:Elasticsearch是一个强大的分布式搜索和分析引擎,提供了丰富的查询和聚合功能。本文将介绍Elasticsearch的基本查询语法,包括预发查询和聚合查询,以及如何使用聚合功能统计数量。 Elasticsearch是一种开源的分布式搜索和分析引擎,广泛应用于各种场景,包括日志分析、

    2024年02月11日
    浏览(49)
  • MySQL8.0中Online DDL也要在业务低峰期执行

    一、背景 MySQL 从 5.6 开始引入了 Online DDL , alter 操作不再阻塞 dml 。在 MySQL 8.0 中,针对 Online DDL 做了进一步优化, alter table 加列操作支持 INSTANT 算法,意思就是使用这个算法进行加列操作只需要修改表的元数据信息,操作瞬间就完成了。在 MySQL 8.0.30 以后, instant 算法支持

    2023年04月25日
    浏览(41)
  • SQL从三个表中根据时间分别查询并汇总数量一行展示

    需求:如果您要从三个表中根据时间分别查询并汇总数量,然后将结果以时间和数量一行展示,可以使用子查询和条件聚合。 可以看到2023-07-31日,入库9个,出库0个,退货0个。

    2024年02月14日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包