数据库表名station_quality_detail_info
id int(11) 主键
report_time datetime 报文时间
rule_list varchar(255) 触发规则列表 通过","分隔
统计每个规则预警的次数
首先:思路,分析数据结构,发现表中有98,99这种一行多个数据的结构,可以考虑一行变多行
SELECT
substring_index(
substring_index(
qa.rule_list,
',',
b.help_topic_id + 1
),
',' ,- 1
) AS shareholder
FROM
station_quality_detail_info qa
JOIN mysql.help_topic b ON b.help_topic_id < (
length(qa.rule_list) - length(
REPLACE (qa.rule_list, ',', '')
) + 1
)
where qa.report_time >="2019-03-20 01:00:00" and rule_list != ""
这样本来98 99 一行数据,变为2行数据,这样就实现了一行数据变多行数据。
需要实现的业务是:通过每个规则出现的频率,所以肯定需要根据shareholder进行分组
统计频率sql
SELECT
substring_index(
substring_index(
qa.rule_list,
',',
b.help_topic_id + 1
),
',' ,- 1
) AS shareholder,count(qa.id)
FROM
station_quality_detail_info qa
JOIN mysql.help_topic b ON b.help_topic_id < (
length(qa.rule_list) - length(
REPLACE (qa.rule_list, ',', '')
) + 1
)
where qa.report_time >="2019-03-20 01:00:00" and rule_list != ""
group by shareholder
这样就实现了统计mysql中有逗号的列,每个值出现的频率
思路:先把有逗号的一行数据,换成多行数据,再进行分组求和
有疑问的朋友,可以再下方留言,大家互相交流!