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被忽略。

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

相关文章

  • MySQLBackup备份数据库的操作过程

    MySQLBackup备份数据库的操作过程

    这篇文章主要介绍了MySQLBackup备份数据库的操作过程,包括安装部署和配置备份管理员的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Mysql-Insert插入过慢的原因记录和解决方案

    Mysql-Insert插入过慢的原因记录和解决方案

    这篇文章主要介绍了Mysql-Insert插入过慢的原因记录和解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • SQL实现LeetCode(176.第二高薪水)

    SQL实现LeetCode(176.第二高薪水)

    这篇文章主要介绍了SQL实现LeetCode(176.第二高薪水),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • MySQL聚合查询案例讲解

    MySQL聚合查询案例讲解

    这篇文章主要介绍了MySQL聚合查询案例讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Mysql中的Datetime和Timestamp比较

    Mysql中的Datetime和Timestamp比较

    这篇文章主要介绍了Mysql中的Datetime和Timestamp比较,本文总结了它们的相同点和不同点以及时间格式介绍等,需要的朋友可以参考下
    2015-03-03
  • MySQL使用物理方式快速恢复单表

    MySQL使用物理方式快速恢复单表

    这篇文章主要介绍了MySQL使用物理方式快速恢复单表,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • CentOS 8 安装 MySql并设置允许远程连接的方法

    CentOS 8 安装 MySql并设置允许远程连接的方法

    这篇文章主要介绍了CentOS 8 安装 MySql并设置允许远程连接的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • mysql中如何判断是否支持分区

    mysql中如何判断是否支持分区

    这篇文章主要介绍了mysql中如何判断是否支持分区的相关资料,需要的朋友可以参考下
    2015-10-10
  • 浅谈mysql的子查询联合与in的效率

    浅谈mysql的子查询联合与in的效率

    本文是作者在实际产品测试中遇到的问题,继而作了相关总结,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • MySql状态查看方法 MySql如何查看连接数和状态?

    MySql状态查看方法 MySql如何查看连接数和状态?

    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接
    2012-11-11

最新评论