1

私はいくつかのデータを含むこのテーブルを持っています:

table ColorsFlavors

id | name | color | flavor
--------------------------
 1 | n1   | green | lemon
 2 | n2   | blue  | strawberry
 3 | n3   | red   | lemon
 4 | n4   | green | lemon
 5 | n5   | green | mango
 6 | n6   | red   | chocolate
 7 | n7   | white | lemon
 8 | n8   | blue  | mango
 9 | n9   | green | chocolate

各色の行の総数と、各フレーバーの行の総数を取得できるSQLクエリ(またはクエリ?)を作成したいと思います。

このようなもの:

colors | occurrences
--------------------
green  |   4
blue   |   2
red    |   6
white  |   1


flavor    | occurences
----------------------
lemon     |   4
strawberry|   1
mango     |   2
chocolate |   2

データテーブルに表示されない色/フレーバーが0カウントになるように、選択する色とフレーバーの事前定義されたリストがある場合もどうでしょうか。

colors | occurrences
--------------------
green  |   4
blue   |   2
red    |   6
white  |   1
black  |   0


flavor    | occurences
----------------------
lemon     |   4
strawberry|   1
mango     |   2
chocolate |   2
cherry    |   0

では、それらを取得するためのSQLクエリは何でしょうか?

4

1 に答える 1

4

ColorsFlavorsテーブルのすべての色を実行するには

Select
  cf.Color,
  Count(*)
From
  ColorsFlavors cf
Group By
  cf.Color

テーブルに事前定義されたリスト(これをColorsと呼びます)があり、ゼロを含めたい場合:

Select
  c.Color,
  Coalesce(Count(*), 0)
From
  Colors c
    Left Outer Join
  ColorsFlavors cf
    On c.Color = cf.Color
Group By
  c.Color

誰かが入力した事前定義されたリストがある場合

Select
  c.Color,
  Coalesce(Count(*), 0)
From  (
    Select 'green' As Color Union All
    Select 'blue' Union All
    Select 'red' Union All
    Select 'white' Union All
    Select 'black'
  ) c
    Left Outer Join
  ColorsFlavors cf
    On c.Color = cf.Color
Group By
    c.Color

これであなたはフレーバーを解決することができるはずです!

于 2012-11-17T01:07:44.843 に答える