MySQL如何统计计数结果?

时间:2013-02-04 21:16:43

标签: mysql sql

如何在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

我想要一个查询,它会告诉我表B中有多少项目,每个月至少有两种颜色。换句话说,我每月销售的商品数量超过2种。结果将是:

Month  Results
Jan      2
Feb      0
Mar      1

谢谢。

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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和TableB中COUNTDISTINCT项。要返回2月0日,您需要LEFT JOIN

这是SQL Fiddle

祝你好运。