SQL统计行所属的某些类别的出现次数

SQL统计行所属的某些类别的出现次数,sql,count,group-by,Sql,Count,Group By,我有这张表和一些数据: 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 | chocolat

我有这张表和一些数据:

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查询是什么呢?

执行ColorsFlavors表中的所有颜色

Select
  cf.Color,
  Count(*)
From
  ColorsFlavors cf
Group By
  cf.Color
如果在我称之为颜色的表中有一个预定义列表,并且希望包含零:

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

有了这个,你应该能够找出味道

执行ColorsFlavors表中的所有颜色

Select
  cf.Color,
  Count(*)
From
  ColorsFlavors cf
Group By
  cf.Color
如果在我称之为颜色的表中有一个预定义列表,并且希望包含零:

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

有了这个,你应该能够找出味道

嗯,没有颜色表,但也许我可以通过连接“模拟”一个颜色表?@JavierNovoaC。你说如果你有一个预定义的颜色列表可供选择怎么办。“你从哪里弄来的?”贾维尔·诺沃克。我已经添加了更多选项。嗯,没有颜色表,但也许我可以通过连接“模拟”一个颜色?@JavierNovoaC。你说如果你有一个预定义的颜色列表可供选择怎么办。“你从哪里弄来的?”贾维尔·诺沃克。我已经加入了更多的选择。