Mysql分组在CSV字段中

时间:2013-09-03 21:37:17

标签: mysql sql csv group-by

使用SQL(mySQL)在类似csv的列中执行group by语句的最佳方法是什么?

Table Products Color
+-------------+--------------+
| Product Id  | Color        |
+-------------+--------------+
| 120         | Red, Blue    |
| 121         | Green, Black | 
| 122         | Red, Black   | 
+-------------+--------------+

从上表中我需要计算一个颜色出现的次数并返回这样的内容:

+-------------+-------+
| Color       | Count |
+-------------+-------+
| Red         | 2     |
| Blue        | 1     | 
| Green       | 1     | 
| Black       | 2     | 
+-------------+-------+

可以在不规范数据库的情况下执行此操作吗?

1 个答案:

答案 0 :(得分:1)

如果您无法更改表格结构,但可以创建一个列出所有颜色的表格,则可以使用此查询:

SELECT Colors.Color, Count(*)
FROM
  Products INNER JOIN Colors
  ON FIND_IN_SET(Colors.Color, REPLACE(Products.Color, ' ', ''))>0
GROUP BY
  Colors.Color

看到它正常工作here。请注意,它无法进行优化,因为它无法在索引上使用。