0

例如,假设有一张扎染 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%'

ETC.....

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

示例:如果我的表要具有“”列“颜色”的值blue, red, yellow,而另一行将是颜色 =“ red, green, yellow”等...

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

Blue    Red   Yellow  Green
  1      2      2       1
4

3 回答 3

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)是一个非常好记住的技巧。

于 2012-09-03T19:34:34.027 回答
0

假设您的颜色字​​典表是 COLORS

Select colors.name, count(*) from colors
Join yourtable t on Instr(t.color,colors.name)>0
Group by colors.name
于 2012-09-03T18:55:13.723 回答
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
于 2012-09-03T18:32:48.547 回答