我对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
我需要选择制造商的类型,制造商拥有超过1个型号但所有这些型号都是单一型号。所以输出应该是
maker type
D Printer
当我仅通过制造商进行分组时一切正常,但是当使用制造商和类型=一切都出错时:( 是否可以通过单个列执行组,但输出中有2个? 没有类型的正确响应将返回下一个查询:
Select maker from product
group by maker
having count(model)>1
and count(distinct type)=1
但是,当我选择制造商,键入 - 它出错了:( 当使用选择制造商,类型和按制造商分组时,输入错误
花了大约4个小时来解决这个问题,非常感谢你的帮助 提前谢谢!
答案 0 :(得分:5)
要回答这个问题,除非它有某种分析,否则不能在分组中包含选择列中的列。您必须使用分析来告诉Oracle如何处理多行。
鉴于您保证只有一种类型,简单的最大值是安全的。
SELECT maker, MAX(TYPE) AS type
FROM product
GROUP BY maker
HAVING COUNT(MODEL) > 1 AND COUNT(DISTINCT TYPE) = 1
答案 1 :(得分:0)
你正在寻找这个:
SELECT MAKER, TYPE, COUNT(*) AS NUMBER_OF_MODELS
FROM PRODUCT
GROUP BY MAKER, TYPE
HAVING COUNT(*) > 1