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

时间:2015-07-22 18:34:37

标签: 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

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

maker  type
D     Printer

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

Select maker from product
group by maker
having count(model)>1
and count(distinct type)=1

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

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

2 个答案:

答案 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
相关问题