我想知道在写这个SQL查询的效率方面是否有更好的解决方案,非常感谢您的帮助。
问题: 找出只生产相同型号型号的制造商,这些型号的数量超过1. Deduce:maker,type
我的答案是:
Select distinct P1.maker, P1.type
from Product AS P1 join
(select maker
from Product
group by maker
having count(distinct type)=1
and count(model) > 1) as P2
on P1.maker = P2.maker
给出结果,因为D只产生多于1个型号的打印机:
maker type
D Printer
我尝试使用子查询部分:
select maker,type
from Product
group by maker
having count(distinct type)=1 and count(model) > 1
给出错误:
列'Product.type'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
这让我感到困惑,因为它似乎在聚合函数计数中使用了类型。看来select中的有效列应该是group by或aggreagate函数。
Producer表格如下:
maker type model
B PC 1121
A PC 1232
A PC 1233
E PC 1260
A Printer 1276
D Printer 1288
A Laptop 1298
C Laptop 1321
A Printer 1401
A Printer 1408
D Printer 1433
E Printer 1434
B Laptop 1750
A Laptop 1752
E PC 2112
E PC 2113
答案 0 :(得分:0)
尝试:
select maker, max(type)
from Product
group by maker
having count(distinct type)=1
and count(model) > 1
在具有聚合函数的类型中没有做任何事情。当您收到该错误时,问题出在select中。您按制造商分组,如果制造商有多种类型,会发生什么?应该显示哪种类型? Sql不知道所以你必须聚合类型或者将它添加到组中。在您的情况下,由于整个点只返回具有单一不同类型的行,我们可以使用max来返回类型。