0

使用 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     | 
+-------------+-------+

可以在不规范数据库的情况下做到这一点吗?

4

1 回答 1

1

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

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

看到它在这里工作。请注意,它不能被优化,因为它不能在索引上使用。

于 2013-09-03T21:53:35.780 回答