0

たとえば絞り染めのTシャツのテーブルがあるとしましょう...一部のシャツには複数の色があり、文字列としてコンマで区切られてリストされています。blue,yellow,red,purpleまたはなどgreen,white,black,red

各色が何回存在するかをカウントするために、1つのクエリを実行したいと思います。どの「色」が列に存在するかを事前に知っています。

私が今しているのは、「色」ごとに個別のクエリです。

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

等.....

15の異なるクエリよりも効率的な方法はありますか?

例:テーブルに""の列'color'の値がblue, red, yellowあり、別の行がcolor=" 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

このようなものはおそらくあなたが探しているものです:

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 に答える
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 に答える