mysql字段中的每个值对数据进行分组统计

medicare_type的值是由一个或多个逗号(,)分隔组成,实现每个值分组统计

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(c.medicare_type, ',', n), ',', -1) AS value, COUNT(*) as count
FROM mc_mijian_contact c
INNER JOIN (
  SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
	UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) numbers ON CHAR_LENGTH(c.medicare_type) - CHAR_LENGTH(REPLACE(c.medicare_type, ',', '')) >= n - 1
INNER JOIN  mc_mijian_contact_disease_info df ON df.contact_id=c.contact_id
WHERE c.medicare_type !='' 
and YEAR(c.created_at)=2022
AND df.disease_id=16
GROUP BY value
ORDER BY value ASC
  • SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(a, ',', n), ',', -1) AS value, COUNT(*) as count:

  • 该语句选择了两个列:一个名为" value "的值,它由一个或多个逗号(,)分隔的子字符串组成;以及一个名为" count "的计数器,用于确定每个值在原始表中出现的次数。

  • INNER JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 ) numbers ON CHAR_LENGTH(a) - CHAR_LENGTH(REPLACE(a, ',', '')) >= n - 1:

  • 这是定义了一个内部联接,用于将源表连接到一个数字表。数字表由四行组成,从1到4。这个JOIN条件使用了CHAR_LENGTH函数来计算逗号分隔的字符串中有几个子字符串,并将其与数字表进行比较,以便正确地识别要拆分的子字符串。

  • GROUP BY value:

  • 将结果按"value"列进行分组,以计算每个值在表中出现的次数。

  • 用MySQL的内置函数和联接操作实现了将一个包含多个逗号分隔值的字段拆分成单独的子字符串,并计算每个子字符串在原始表中出现的次数。这对于需要处理大量文本数据或文本列表的开发人员和数据分析师可能非常有用。

zed
请先登录后发表评论
  • latest comments
  • 总共0条评论