GROUP BY和COUNTs未产生预期结果

Ale*_*aux 10 sql group-by

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

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

这是结果 select * from product

在此输入图像描述

该练习说:找出只生产相同类型模型的制造商,这些模型的数量超过1. Deduce:maker,type.

正确的查询应该返回:

在此输入图像描述

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

这是我的查询:

SELECT
DISTINCT maker
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1
Run Code Online (Sandbox Code Playgroud)

它返回:

在此输入图像描述

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

SELECT
DISTINCT maker,type
FROM product
GROUP BY maker,type
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

在此输入图像描述

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

Mar*_*ith 16

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

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

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


小智 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)
Run Code Online (Sandbox Code Playgroud)