mysql - 多个字符串的所有实例的计数

时间:2012-09-03 18:29:47

标签: mysql where-in

假设有一张扎染T恤的桌子......例如,有些衬衫有多种颜色,列为字符串,逗号分隔。例如blue,yellow,red,purplegreen,white,black,red

我想做一个查询来计算每种颜色的存在次数。我事先知道列中将存在哪些“颜色”。

我现在正在做的是针对每种“颜色”的单独查询:

SELECT count(color) WHERE color LIKE '%blue%'
SELECT count(color) WHERE color LIKE '%red%'
SELECT count(color) WHERE color LIKE '%yellow%'

等.....

有比15个不同的查询更有效的方法吗?

示例:如果我的表格中包含“blue, red, yellow”列的“颜色”值,而另一行将是color =“red, green, yellow”等...

我正在寻找一个将返回的查询:

Blue    Red   Yellow  Green
  1      2      2       1

3 个答案:

答案 0 :(得分:1)

假设您的断言I will know beforehand which 'colors' will exist in the column,您要找的是:

SELECT
    SUM(color like '%blue%') as total_blue,
    SUM(color like '%red%') as total_red,
    (...)
    SUM(color like '%yellow%') as total_yellow
FROM
    your_table;

SUM(any boolean condition you want)是一个非常好的诀窍。

答案 1 :(得分:0)

这样的事情可能就是你要找的东西:

SELECT
  color.name,
  COUNT(1)
FROM
  foo
LEFT JOIN
  color ON foo.color_id = color.id
GROUP BY
  color.id

如果您已经提供了一些关于数据外观的方案,那将会有所帮助。然而,这是这种情况下的基本解决方案。

如果您只是将颜色作为字符串,那就更简单了:

SELECT
  color,
  COUNT(1)
FROM
  foo
GROUP BY
  color

答案 2 :(得分:0)

假设你的颜色字典表是COLORS

Select colors.name, count(*) from colors
Join yourtable t on Instr(t.color,colors.name)>0
Group by colors.name