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
我对 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