如何在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
谢谢。
答案 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 BY
和HAVING
来获取TableA和TableB中COUNT
个DISTINCT
项。要返回2月0日,您需要LEFT JOIN
。
这是SQL Fiddle。
祝你好运。