1

グループの結果をカウントするために 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

各月に少なくとも 2 つの色があるテーブル A のアイテムがテーブル B にいくつ存在するかを教えてくれるクエリが必要です。つまり、各月に 2 色以上の商品をいくつ販売したかということです。したがって、結果は次のようになります。

Month  Results
Jan      2
Feb      0
Mar      1

ありがとうございました。

4

3 に答える 3

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

これは、1か月の色の総数をカウントします。2以上の場合、アイテムの数が含まれます。それ以外の場合は0です。

于 2013-02-04T21:26:39.240 に答える
1

このサブクエリは、少なくとも 2 つの色を持つすべてのアイテムを返します。

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
于 2013-02-04T22:40:46.187 に答える
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 BYandを使用して、TableA と TableBの項目HAVINGを取得します。2 月 0 日を返すには、.COUNTDISTINCTLEFT JOIN

これがSQL Fiddleです。

幸運を。

于 2013-02-04T21:20:20.530 に答える