SQL分组统计条数时,不存在组类型,如何显示条数为0

首先有张表

CREATE TABLE `person` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `type` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

表里很简单三条数据:

INSERT INTO `apollo`.`person`(`id`, `name`, `type`) VALUES (1, 'zhangsan', 1);
INSERT INTO `apollo`.`person`(`id`, `name`, `type`) VALUES (2, 'lisi', 1);
INSERT INTO `apollo`.`person`(`id`, `name`, `type`) VALUES (3, 'jarvis', 2);

type 为1 的是: zhangsan,lisi 。type 为2 的是: jarvis

场景1:

统计type 类型为 1,为2的条数:

SELECT
	type,
	count( * ) 
FROM
	`person` 
WHERE
	type IN ( 1, 2 ) 
GROUP BY
	type

运行结果:
在这里插入图片描述
是我们想要的。

如果场景变更,我还要统计 type为3 的条数:

显然type为3的条数我们肉眼看出来了,没有,那如果我们想在查询条件里展示处理,没有的话就 为0

此时,以前的 SQL 就做不到了,因为 Where 条件里面的命中数据没有 type 为3的,无法做数据分组以及统计了,所以我们需要更改一下我们的 SQL 思路

临时表的思路:

SQL 构建一张 type 为 1、2、3的 临时表

SELECT 1 AS `condition` UNION SELECT 2 UNION SELECT 3 

在这里插入图片描述
(可以是临时表,也可以实际去建一张表,都可以,但开发场景中为了 构建返回数据的一个场景而去建一张表,有没有必要就根据实际的开发场景自己去衡量了)

最终的 SQL

SELECT
	t.`condition`,
	IFNULL( p.count, 0 )  AS totalCount
FROM
	( SELECT 1 AS `condition` UNION SELECT 2 UNION SELECT 3 ) t
	LEFT JOIN (
SELECT
	`type` AS t,
  	count( * ) AS count 
FROM
	person 
WHERE
	`type` IN ( 1, 2, 3 ) 
GROUP BY
	`type` 
	) 
	AS p 
	ON t.`condition` = p.t

在这里插入图片描述
这就是我们想要的了…!!

相关推荐

  1. MySQL:统计去重

    2024-02-01 22:38:03       14 阅读
  2. 统计HBase表记录的方法

    2024-02-01 22:38:03       14 阅读
  3. sql server 查询所有表的记录

    2024-02-01 22:38:03       36 阅读
  4. 使用Mybatis-plus分页查询的Total与实际对应

    2024-02-01 22:38:03       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 22:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 22:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 22:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 22:38:03       18 阅读

热门阅读

  1. 9.SELinux

    9.SELinux

    2024-02-01 22:38:03      20 阅读
  2. explicitCharkey是什么

    2024-02-01 22:38:03       38 阅读
  3. L1-017 到底有多二分数 15

    2024-02-01 22:38:03       32 阅读
  4. Linux 下多线程理解

    2024-02-01 22:38:03       30 阅读
  5. Postgresql使用update

    2024-02-01 22:38:03       28 阅读
  6. 学习python第三天

    2024-02-01 22:38:03       27 阅读
  7. k8s学习-Health Check

    2024-02-01 22:38:03       30 阅读
  8. 网课:校门外的树——牛客(题解)

    2024-02-01 22:38:03       40 阅读
  9. Spring相关框架中的bean及其实例化

    2024-02-01 22:38:03       29 阅读