【求助】mysql四表统计数量:统计中国各个省份安装企业站点数量

@[toc](【求助】四表统计数量:统计中国各个省份安装企业站点数量)

最后要求效果


## 表结构

```
# 地区表
CREATE TABLE `sys_region` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'id 主键区划代码',
  `name` varchar(32) DEFAULT NULL COMMENT '名称,如北京,上海,广州',
  `ad_name` varchar(32) DEFAULT NULL COMMENT '环保行政单位名称,如广东环保厅,广州环保局',
  `level` int(3) unsigned DEFAULT NULL COMMENT '等级 级别 1:省份 2:城市 3:区域',
  `parent_id` bigint(20) unsigned DEFAULT NULL COMMENT '上级id',
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='行政区划表';


# 企业表
CREATE TABLE `cus_enterprise` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键 主键id',
  `region_id` bigint(20) unsigned DEFAULT NULL COMMENT '区划id 对应sys_region主键id',
  `industry_id` bigint(20) unsigned DEFAULT NULL COMMENT '对应sys_industry主键id',
  `name` varchar(32) NOT NULL COMMENT '名称 企业名称',
  `code` varchar(64) DEFAULT NULL COMMENT '企业信用代码 统一社会信用代码',
  `environment_principal` varchar(32) DEFAULT NULL COMMENT '负责人 环保负责人',
  `phone` varchar(32) DEFAULT NULL COMMENT '联系电话',
  `control_level` tinyint(3) unsigned DEFAULT NULL COMMENT '控制级别 控制级别:1.国控,2.省控,3.市控,4.县控 对应数据字典code=CUS_ENTERPRISE_CONTROL_LEVEL',
  `address` varchar(255) DEFAULT NULL COMMENT '地址 企业地址',
  `introduction` varchar(1024) DEFAULT NULL COMMENT '简介 企业简介',
  `is_deleted` tinyint(3) unsigned DEFAULT '0' COMMENT '是否删除 0否1是',
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '更新时间',
  `tel` varchar(14) DEFAULT NULL COMMENT '手机号码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='一企一档';


# 站点表
CREATE TABLE `cus_point` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键 主键id',
  `enterprise_id` bigint(20) unsigned DEFAULT NULL COMMENT '对应cus_enterprise主键id',
  `group_id` bigint(20) unsigned DEFAULT NULL COMMENT '运维小组id 参见sys_group主键id',
  `user_id` bigint(20) unsigned DEFAULT NULL COMMENT '负责人id 对应sys_user主键id',
  `name` varchar(32) NOT NULL COMMENT '名称 站点名称',
  `mn` varchar(32) NOT NULL COMMENT 'MN号 站点MN号',
  `type` tinyint(3) DEFAULT NULL COMMENT '监测类型31气 32水',
  `pass` varchar(32) DEFAULT '123456' COMMENT '站点密码',
  `num` varchar(32) DEFAULT NULL COMMENT '编号 站点编号',
  `protocol_type` char(3) DEFAULT NULL COMMENT '协议类型 0=扩展协议、05=05协议、17=17协议',
  `transfer_type` tinyint(3) unsigned DEFAULT NULL COMMENT '传输类型 1:无线传输、2:有线传输',
  `address` varchar(250) DEFAULT NULL COMMENT '地址 站点地址',
  `longitude` decimal(64,10) DEFAULT NULL COMMENT '经度 站点经度',
  `latitude` decimal(64,10) DEFAULT NULL COMMENT '纬度 站点纬度',
  `remark` varchar(1024) DEFAULT NULL COMMENT '站点说明',
  `divisor_count` int(11) unsigned DEFAULT '0' COMMENT '监测因子数量',
  `is_deleted` tinyint(3) unsigned DEFAULT '0' COMMENT '是否删除 0否1是',
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '更新时间',
  `gmt_stop` datetime DEFAULT NULL,
  `stop_reason` varchar(1024) DEFAULT NULL,
  `is_started` tinyint(11) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用 1:启用  0:停用  默认值为1',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='站点管理表';

```


数据

```
INSERT INTO `cus_enterprise` VALUES ('51', '110102', '2', '测试0319', 'SHBYKJ199D', '小吴', '18117541115', '2', '上海市奉贤区南桥镇沪杭公路1539号', '无', '0', '2021-03-19 14:44:20', null, '021-8888888');

INSERT INTO `cus_point` VALUES ('65', '51', null, null, '宝英测试站点排放口', '12345mn1', '31', null, null, '17', '1', null, '121.6336300000', '31.1658110000', null, '2', '0', '2021-04-01 13:39:50', '2021-04-01 13:41:06', null, null, '1');
INSERT INTO `sys_region` VALUES ('310000', '上海市', null, '1', null, '2020-08-11 09:30:40');
INSERT INTO `sys_region` VALUES ('310120', '奉贤区', null, '3', '310100', '2020-08-11 09:30:40');
INSERT INTO `sys_region` VALUES ('310100', '市辖区', null, '2', '310000', '2020-08-11 09:30:40');
```


## 怎么才能得到????如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511144442680.png)

 

区域 |   安装数量

上海       123

北京       235

湖南        212

......

是按省份还是按城市统计?

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

补充大佬的回答:

 


把城市表的主键设置为6位字符串,


2位表示省,2位表示市,2位表示区县,这样就很简单,通过模糊查询搞定。
 


比如广东省110000


广州市110100


白云区
110101


按照这种做法是最简单的,现在基本的数据库也是这样设计的


查询省份就是一个like provinceid like '11%'就可以了。


深圳市:110200


龙岗区:110201
 

 

 

 

 

正解在这: 结合城市表的设计法    
2位表示省,2位表示市,2位表示区县,这样就很简单,通过模糊查询搞定。
select   a.name,COUNT(*),b.* From   cus_enterprise a LEFT JOIN sys_region
b on  a.region_id=b.id
GROUP BY LEFT(b.id,2) # 查询各个省区分布的企业

select   a.name,COUNT(*),b.* From   cus_enterprise a LEFT JOIN sys_region
b on  a.region_id=b.id
GROUP BY LEFT(b.id,4) # 查询各个市区域分布的企业

select   a.name,COUNT(*),b.* From   cus_enterprise a LEFT JOIN sys_region
b on  a.region_id=b.id
GROUP BY LEFT(b.id,4) # 查询各个县区域分布的企业

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y