我正在做一些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)
当您添加type到GROUP 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)