GROUP BY和COUNTs未产生预期结果

时间:2013-01-03 17:37:55

标签: sql group-by

我正在做一些SQL练习,但我陷入了我将要描述的那个。

有一个名为product的表有3列:maker,model和type。

这是select * from product

的结果

enter image description here

练习说: 找出仅生产相同型号型号的制造商,这些型号的数量超过1。 演绎:制造者,类型。

正确的查询应该返回:

enter image description here

我的方法是先看看哪些制造商只生产一种产品,然后排除那些只有一种型号的制造商。为此,我使用了以下查询,它返回了正确的结果,除了我只能设法显示制造商,但不是类型和练习要求两者。

这是我的疑问:

SELECT
DISTINCT maker
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1

然后它返回:

enter image description here

然后,当我尝试显示类型时:

SELECT
DISTINCT maker,type
FROM product
GROUP BY maker,type
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1

这就是我得到的:

enter image description here

你知道为什么这不能按预期工作吗?你会怎么做才能解决这个问题?我一直试图解决这个问题超过3个小时没有成功。 :(请帮帮我。

6 个答案:

答案 0 :(得分:16)

如果您只返回包含一种类型的群组,则可以使用MAX / MIN找出该群组中type的内容。

SELECT maker,
       MAX(type) AS type
FROM   product
GROUP  BY maker
HAVING COUNT(DISTINCT type) = 1
       AND COUNT(model) > 1 

当您将type添加到GROUP BY列表中时,它会为maker,type的每个组合提供一个结果行,这就是您的第二次尝试无效的原因。

答案 1 :(得分:5)

SELECT DISTINCT maker, type 
FROM product 
WHERE maker IN 
   (SELECT DISTINCT maker 
    FROM product 
    GROUP BY maker HAVING COUNT(distinct type) = 1
    AND count(model) > 1)

答案 2 :(得分:1)

SELECT
DISTINCT maker, type
FROM makertype
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(ident)> 1

你试图按制造商分组并输入第二个查询,这将隔离任何具有一种类型的制造商和类型的组合(这将始终为真,因为每个组包含一对不同的制造商和类型)和两个或更多模型。你只想按制造商分组。

答案 3 :(得分:0)

    select distinct product.maker, product.type from product, (SELECT maker

    FROM product

    GROUP BY maker

    HAVING COUNT(distinct type) = 1 

           AND

           COUNT(model)> 1) as x

    where x.maker=product.maker

试试这个。它对我有用。

答案 4 :(得分:0)

SELECT MAKER,MAX(TYPE)
 FROM PRODUCT
 GROUP  BY MAKER
 HAVING  COUNT(*)>1  AND  MAX(TYPE)=MIN(TYPE)

答案 5 :(得分:0)

试试这个:

select maker, max(type) as type from Product
Group by maker
Having count (Distinct type) = 1 and Count(maker)>1