分类分级数据统计

主题

本文主要分享一下,涉及到以下两种数据情况,如何写统计。

情况1:一个字段包含多个级别,例如:1,2,3 。这种情况如何转化为中文

情况2:如果将多个字段合并展示,例如:字段1和字段2合并展示

具体示例如下,以下仅为展示具体情况,具体的字段含义不太准确

1.表结构

CREATE TABLE `t_course` (
  `id` int(12) NOT NULL COMMENT '主键',
  `course_level` varchar(20) DEFAULT NULL COMMENT '1初级2中级3高级',
  `open_student` int(1) DEFAULT NULL COMMENT '面向学生,1是,0否',
  `open_teacher` int(1) DEFAULT NULL COMMENT '面向老师,1是,0否',
  `open_patriarch` int(1) DEFAULT NULL COMMENT '面向家长,1是,0否',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.数据库数据

分类分级数据统计_第1张图片

3.统计需要的展示效果

分类分级数据统计_第2张图片

4.SQL编写

首先需要建立一张课程等级字典表,如下:

CREATE TABLE `t_level_dict` (
  `id` int(2) NOT NULL COMMENT '主键',
  `level_code` int(1) DEFAULT NULL COMMENT '等级编码',
  `level_name` varchar(10) DEFAULT NULL COMMENT '等级名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

字典表的数据如下:

分类分级数据统计_第3张图片

然后开始我们的SQL编写,SQL如下:

select ( 
select GROUP_CONCAT(level_name SEPARATOR ',')  from t_level_dict t2 where FIND_IN_SET(t2.ID,t1.course_level) ) as '课程等级',
CONCAT(IF(t1.open_student != '0','学生,',''),IF(t1.open_teacher != '0','老师,',''),IF(t1.open_patriarch != '0','家长','')) as '面向对象'
from t_course t1

可以看到效果如下:

分类分级数据统计_第4张图片

你可能感兴趣的:(报表统计,MySql,数据库,报表统计,分类分级,find_in_set,group_concat)