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
)
来源:CSDN
作者:w嘉劲ing
链接:https://blog.csdn.net/wujiajin1994/article/details/104049525