SQL: Select 分组依据中的单列两列仅具有条件

SQL: Select two columns by single column in group by with only having condition

我对 SQL 有点陌生; 我有一个 table 个产品:

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

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

maker  type
D     Printer

当我只按 maker 执行分组时,一切正常,但是当同时使用 maker 和 type = 时,一切都出错了:( 是否可以按单列执行分组但输出有 2 个? 没有类型 returns 下一个查询的正确响应:

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

但是当我 select maker,type - 它出错了:( 使用 select maker,type 和 group by maker,type

时也出错

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

要回答这个问题,不,您不能在 select 中包含不在分组中的列,除非它具有某种分析。您必须使用解析来告诉 Oracle 如何处理多行。

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

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

您正在寻找这个:

SELECT MAKER, TYPE, COUNT(*) AS NUMBER_OF_MODELS
FROM PRODUCT
GROUP BY MAKER, TYPE
HAVING COUNT(*) > 1