mySql关于统计数量的SQL查询操作

 更新时间:2021年01月22日 15:52:10   作者:Megamind_HL  
这篇文章主要介绍了mySql关于统计数量的SQL查询操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

select project_no,
sum(case when device_state=0 then 1 else 0 end)as offTotal ,
sum(case when device_state=1 then 1 else 0 end)as onlineTotal,
sum(1)total
from iot_d_device
group by project_no
order by project_no 

补充:MySQL一条SQL语句查询多条统计结果

商城项目难免会遇到用户个人中心页查询不同状态订单数量的问题。当然这个问题并不难,可以写一个DAO层方法,以状态作为入参,每次传入不同状态值依次查询相应状态的订单数量。

今天在写H5端接口时,我想换种方式查,也就是通过一条SQL查询出多个状态的订单数量。在网上搜了搜,方法可行,所以就尝试了下,果不其然成功了。

示例如下(数据只为演示今天的问题,表设计并不严谨。勿怪):

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for mini_test_order
-- ----------------------------
DROP TABLE IF EXISTS `mini_test_order`;
CREATE TABLE `mini_test_order` (
 `id` int(11) NOT NULL,
 `order_no` varchar(32) DEFAULT NULL COMMENT '订单号',
 `user_id` int(11) DEFAULT NULL COMMENT '用户id',
 `shop_id` int(11) DEFAULT NULL COMMENT '商家id',
 `order_status` tinyint(1) DEFAULT NULL COMMENT '订单状态',
 `create_time` int(10) DEFAULT NULL COMMENT '创建时间',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of mini_test_order
-- ----------------------------
INSERT INTO `mini_test_order` VALUES ('1', 'aaaaaaaaa', '11', '111', '1', '1573041313');
INSERT INTO `mini_test_order` VALUES ('2', 'bbbbbbbb', '11', '222', '1', '1573041313');
INSERT INTO `mini_test_order` VALUES ('3', 'cccccccccc', '11', '333', '2', '1573041313');
INSERT INTO `mini_test_order` VALUES ('4', 'dddddddd', '11', '222', '3', '1573041313');
INSERT INTO `mini_test_order` VALUES ('5', 'eeeeeeeee', '11', '111', '4', '1573041313');
INSERT INTO `mini_test_order` VALUES ('6', 'ffffffffffffff', '11', '111', '3', '1573041313');
INSERT INTO `mini_test_order` VALUES ('7', 'gggggggg', '11', '222', '4', '1573041313');
INSERT INTO `mini_test_order` VALUES ('8', 'hhhhhhhhh', '11', '111', '4', '1573041313');
INSERT INTO `mini_test_order` VALUES ('9', 'iiiiiiiiiiiiiiiiiii', '11', '333', '3', '1573041313');
INSERT INTO `mini_test_order` VALUES ('10', 'jjjjjjjjjjjjjjjjjj', '11', '222', '1', '1573041313');

核心SQL语句如下:

SELECT COUNT(CASE order_status WHEN 1 THEN 1 END) AS "状态1",COUNT(CASE order_status WHEN 2 THEN 1 END) AS "状态2",COUNT(CASE order_status WHEN 3 THEN 1 END) AS "状态3",COUNT(CASE order_status WHEN 4 THEN 1 END) AS "状态4" FROM `mini_test_order`;

或如下:

SELECT COUNT(CASE WHEN order_status = 1 THEN 1 END) AS "状态1",COUNT(CASE WHEN order_status = 2 THEN 1 END) AS "状态2",COUNT(CASE WHEN order_status = 3 THEN 1 END) AS "状态3",COUNT(CASE WHEN order_status = 4 THEN 1 END) AS "状态4" FROM `mini_test_order` ;

当然,SQL语句不仅仅局限于上述两种写法,喜欢探究的童靴欢迎留言补充。

MySQL的case when的语法有两种

1.简单函数

CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

2.搜索函数

CASE WHEN [expr] THEN [result1]…ELSE [default] END

两者区别

前者枚举col_name这个字段值为符合条件value1时所有可能的值;

后者可以写判断,并且搜索函数只会返回第一个符合条件的值,其他case被忽略。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • MySQL中如何计算同比和环比

    MySQL中如何计算同比和环比

    在工作的过程中,经常会使用到环比、同比,下面这篇文章主要给大家介绍了关于MySQL中如何计算同比和环比的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL单表千万级数据处理的思路分享

    MySQL单表千万级数据处理的思路分享

    日前笔者需要处理MySQL单表千万级的电子元器件数据,进行数据归类, 数据清洗以及器件参数处理,进而得出国产器件与国外器件的替换兼容性数据,为电子工程师寻找国产替换件提供参考。
    2021-06-06
  • 如何恢复MySQL主从数据一致性

    如何恢复MySQL主从数据一致性

    MySQL主从数据一致性怎么恢复,MySQL主从数据库的数据不一致,猜测备库在同步过程中出现了问题,现在的问题很明确,就是如何恢复主从库数据的一致性,下文为大家分享解决方法,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Mysql数据库delete操作没报错却删除不了数据的解决

    Mysql数据库delete操作没报错却删除不了数据的解决

    本文主要介绍了Mysql数据库delete操作没报错却删除不了数据的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL8.0版本如何正确的使用窗口函数详解

    MySQL8.0版本如何正确的使用窗口函数详解

    MySQL 8.0引入的窗口函数,增强了数据分析能力,窗口函数允许对数据集(窗口)进行操作,与GROUPBY类似,但每个查询行生成独立结果,包括聚合函数如SUM、AVG,专用窗口函数如ROW_NUMBER等,窗口函数应用于数据分组、排序、排名,并支持复杂分析场景,需要的朋友可以参考下
    2024-11-11
  • MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能
    2013-10-10
  • Sysbench多线程性能测试工具

    Sysbench多线程性能测试工具

    sysbench是一个多线程性能测试工具,可以进行CPU/内存/IO/数据库等性能测试,不过我绝大多数的时候都是用它来对数据库(MySQL)进行oltp测试
    2012-11-11
  • Windows下MySQL服务无法停止和删除的解决办法

    Windows下MySQL服务无法停止和删除的解决办法

    我在 Windows 操作系统上,使用解压压缩包的方式安装 MySQL。遇到一点问题,下面通过本文给大家分享Windows下MySQL服务无法停止和删除的解决办法,需要的朋友可以参考下
    2017-02-02
  • MySQL操作并使用Python进行连接

    MySQL操作并使用Python进行连接

    这篇文章主要介绍了MySQL操作并使用Python进行连接,文章通过设置外键进行表与表的相连,且外键必须是其他表的主键展开详细内容,需要的小伙伴可以参考一下
    2022-06-06
  • MySql数据库备份的几种方式

    MySql数据库备份的几种方式

    这篇文章主要介绍了MySql数据库备份的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论