使用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 |
+-------------+-------+
可以在不规范数据库的情况下执行此操作吗?
答案 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。请注意,它无法进行优化,因为它无法在索引上使用。