2013-02-04 71 views
1

如何在MySQL中構造查詢來計算組的結果?所以,MySQL如何計算一次計數的結果?

表A

Month Item 
Jan   1 
Jan   3 
Feb   2 
Feb   2 
Mar   3 

表B

Item Color 
1  red 
1  blue 
2  black 
3  black 
3  yellow 

我想要一個查詢,會告訴我在表A中的許多項目如何在表B中存在凡是有至少兩種顏色每一個月。換句話說,每個月有超過2種顏色的商品有多少件。所以結果將是:

Month Results 
Jan  2 
Feb  0 
Mar  1 

謝謝。

+1

到目前爲止你有什麼?請編輯您的問題,以包括您已做出的任何嘗試,但是一半已烘烤 – bernie

回答

0

嘗試這樣:

SELECT DISTINCT T.Month, COALESCE(T2.Cnt2,0) Cnt 
FROM (
    SELECT Month 
    FROM TableA 
) T LEFT JOIN (
    SELECT A.Month, COUNT(DISTINCT B.Color) Cnt, COUNT(DISTINCT B.Item) Cnt2 
    FROM TableA A 
     INNER JOIN TableB B ON A.Item = B.Item 
    GROUP BY A.Month 
    HAVING COUNT(DISTINCT B.Color) >= 2 
) T2 ON T.Month = T2.Month 

它使用GROUP BYHAVING得到TableA中和表B的DISTINCTCOUNT項目。要返回2月0日,您需要LEFT JOIN

這是SQL Fiddle

祝你好運。

2

如果我理解正確的問題,我認爲下面的答案是:

select a.month, 
     (case when count(distinct b.color) >= 2 then COUNT(distinct a.item) else 0 end) 
from TableA a join 
    TableB b 
    on a.item = b.item 
group by a.month 

這計數的顏色在一個月的總數。如果2或更大,則它具有項目的數量。否則,它擁有0.1

+0

這可以計算每月不同顏色*,而OP似乎是每月*項目數量之後*,每個項目至少有兩種顏色。我不認爲沒有兩級分組就可以做到這一點。 –

+0

我沒有仔細檢查這個答案,當我給我的...但這是一個不錯的主意。+1 – fthiella

+0

@AndriyM。 。 。我們用不同的方式解釋這個說法,「每個月至少有兩種顏色」。現在我看到你的解釋,這也是有道理的。提問的人應該真正澄清。 –

1

此子查詢返回所有至少有兩種顏色的項目:

select Item 
from TableB 
group by Item 
having count(distinct Color)>1 

你還可以用TableA的加入,並將得到的查詢是這樣的:

select 
    A.Month, 
    Count(B.Item) 
from 
    TableA A left join (
    select Item 
    from TableB 
    group by Item 
    having count(distinct Color)>1) B 
    on A.Item=B.Item 
group by A.Month