2012-11-17 56 views
1

我有這個表的一些數據:SQL計數發生的該行屬於

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 

Uhmmm怎麼樣過,如果我有顏色和味道預設列表挑選,使不上的數據表中出現的顏色/口味得到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查詢來檢索這些?

回答

3

做所有的顏色在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 

類型有了這個,你應該能夠WOR k出味道!

+0

好吧,沒有顏色表,但也許我可以通過連接'模擬'一個? –

+0

@JavierNovoaC。你說過如果你有一個預定義的顏色列表可供選擇。你從哪裏得到它們? – Laurence

+0

商業規則... –