我正在做一些SQL练习,但我陷入了我将要描述的那个。
有一个名为product的表有3列:maker,model和type。
这是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个小时没有成功。 :(请帮帮我。
答案 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