SQL:只有条件,按组中的单列选择两列

ash*_*hka 5 sql group-by having

我对SQL有点新鲜; 我有单表产品:

maker model type
A     1232  PC
A     1233  PC
A     1276  Printer
A     1298  Laptop
A     1401  Printer
A     1408  Printer
A     1752  Laptop
B     1121  PC
B     1750  Laptop
C     1321  Laptop
D     1288  Printer
D     1433  Printer
E     1260  PC
E     1434  Printer
E     2112  PC
E     2113  PC
Run Code Online (Sandbox Code Playgroud)

我需要选择制造商的类型,制造商有超过1个型号但所有这些型号都是单一类型.所以输出应该是

maker  type
D     Printer
Run Code Online (Sandbox Code Playgroud)

当我只通过制造商执行分组时一切正常,但是当使用制造商和类型=一切都出错时:(是否可以通过单个列执行组但输出中有2个?没有类型的正确响应返回下一个查询:

Select maker from product
group by maker
having count(model)>1
and count(distinct type)=1
Run Code Online (Sandbox Code Playgroud)

但是当我选择制造商时,键入 - 它出错了:(当使用选择制造商,类型和按制造商分组,类型时也是错误的

花了大约4个小时来解决这个问题,非常感谢您的帮助,提前致谢!

Chr*_*Hep 5

要回答这个问题,除非有某种分析,否则不能在选择中包含不在分组中的列.您必须使用分析来告诉Oracle如何处理多行.

鉴于您保证只有一种类型,简单的最大值是安全的.

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