10

我正在做一些 SQL 练习,但我被困在我将要描述的那个。

有一个名为 product 的表,它有 3 列:制造商、型号和类型。

这是结果select * from product

在此处输入图像描述

练习是这样说的:找出只生产同类型模型的制造商,并且这些模型的数量超过1。推断:制造商,类型。

正确的查询应该返回:

在此处输入图像描述

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

这是我的查询:

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

它返回这个:

在此处输入图像描述

然后,当我尝试通过这样做来显示类型时:

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

这就是我得到的:

在此处输入图像描述

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

4

6 回答 6

16

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

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

当您添加typeGROUP BY列表中时,它会为您提供每个组合的结果行,maker,type这就是您的第二次尝试不起作用的原因。

于 2013-01-03T17:40:39.267 回答
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)
于 2013-04-23T12:33:33.783 回答
1
SELECT
DISTINCT maker, type
FROM makertype
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(ident)> 1

您正在尝试按制造商分组并在第二个查询中键入,这将隔离制造商和类型的任何组合只有一种类型(这将始终正确,因为每个组都包含一对不同的制造商和类型)和两个或更多型号。您只想按制造商分组。

于 2013-01-03T17:50:17.007 回答
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

尝试这个。它对我有用。

于 2013-02-27T17:40:22.163 回答
0
SELECT MAKER,MAX(TYPE)
 FROM PRODUCT
 GROUP  BY MAKER
 HAVING  COUNT(*)>1  AND  MAX(TYPE)=MIN(TYPE)
于 2015-04-03T12:25:02.827 回答
0

尝试这个:

select maker, max(type) as type from Product
Group by maker
Having count (Distinct type) = 1 and Count(maker)>1
于 2015-08-30T08:25:50.197 回答