MySQL 常见统计(没有数据则“补0“)

MySQL 常见统计(没有数据则"补0")

已知:各系统和设备表通过 system_id 关联([注]逻辑关联非物理关联)。
求:查询各系统的设备的数量,若该系统无数据,“补0”。
系统表
设备表
两者之间的逻辑关系
对应的 SQL 语句和数据


SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for device
-- ----------------------------
DROP TABLE IF EXISTS `device`;
CREATE TABLE `device` (
  `id` int NOT NULL,
  `deviceid` int NOT NULL,
  `device_name` varchar(255) NOT NULL,
  `system_id` int NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of device
-- ----------------------------
INSERT INTO `device` VALUES ('1', '1', '设备1', '1');
INSERT INTO `device` VALUES ('2', '2', '设备2', '3');
INSERT INTO `device` VALUES ('3', '3', '设备3', '4');
INSERT INTO `device` VALUES ('4', '4', '设备4', '3');
INSERT INTO `device` VALUES ('5', '5', '设备5', '3');

-- ----------------------------
-- Table structure for d_system
-- ----------------------------
DROP TABLE IF EXISTS `d_system`;
CREATE TABLE `d_system` (
  `system_id` int NOT NULL,
  `system_name` varchar(255) NOT NULL,
  PRIMARY KEY (`system_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of d_system
-- ----------------------------
INSERT INTO `d_system` VALUES ('1', '系统1');
INSERT INTO `d_system` VALUES ('2', '系统2');
INSERT INTO `d_system` VALUES ('3', '系统3');
INSERT INTO `d_system` VALUES ('4', '系统4');
INSERT INTO `d_system` VALUES ('5', '系统5');

实现

SELECT
	ds.system_name,
	COUNT(ds.system_id) num
FROM
	d_system ds
LEFT JOIN (
	SELECT
		system_id
	FROM
		device -- WHERE 限制条件
) d ON d.system_id = ds.system_id
-- WHERE 限制条件
GROUP BY
	ds.system_id
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值