mysql将用,隔开的字符集转成多条记录进行统计

梦想的初衷 提交于 2020-01-20 19:56:53

mysql将用,隔开的字符集转成多条记录进行统计

很耗性能,权当了解学习

场景

当遇到下面的这种数据库字段,要分别统计没种类型的数据时,可考虑方案为拆解记录到主表中(拆解方案这里不做描述),此外还可借助一个辅助表,利用mysql函数来拆分记录
在这里插入图片描述

用到的mysql函数

substring_index(): 字符串截取
length(): 字符串长度校验
replace(): 字符串替换

辅助表

单个表查询可直接用mysql.help_topic,大量查询建议在同一个库中自建表格helq,sql如下,可根据实际属性个数添加数据,关键在必须以0开始,每一条数据必须为关联数字

-- ----------------------------
-- Table structure for help
-- ----------------------------
DROP TABLE IF EXISTS `help`;
CREATE TABLE `help` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 STATS_PERSISTENT=0 COMMENT='构造数据辅助表';

-- ----------------------------
-- Records of help
-- ----------------------------
INSERT INTO `help` VALUES ('0');
INSERT INTO `help` VALUES ('1');
INSERT INTO `help` VALUES ('2');
INSERT INTO `help` VALUES ('3');
INSERT INTO `help` VALUES ('4');
INSERT INTO `help` VALUES ('5');
INSERT INTO `help` VALUES ('6');
INSERT INTO `help` VALUES ('7');
INSERT INTO `help` VALUES ('8');
INSERT INTO `help` VALUES ('9');
INSERT INTO `help` VALUES ('10');

执行语句

SELECT
	a.id,
	SUBSTRING_INDEX(
		SUBSTRING_INDEX(a.types, ',', b.id + 1),
		',',
		- 1
	) AS type_name
FROM
	you_table a
JOIN fa_guard_help b ON b.id < (
	LENGTH(a.types) - LENGTH(
		REPLACE (a.types, ',', '')
	) + 1
)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!