对于给定的数据库
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
问题是: 找到能够生产RAM最低的PC和具有最低RAM的PC中最高速处理器的打印机制造商。结果集:制造商。
让我们分开查询!
从产品Group By制造商中选择DISTINCT制造商,输入HAVING类型 IN('打印机','PC')
我认为这是错误的,因为IN('Printer','PC')就像OR not AND
SELECT模型,速度FROM pc WHERE ram =(SELECT MIN(ram)FROM pc)as lowestRam
WHERE lowestRam.speed=(SELECT MAX(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
查询自己!
SELECT DISTINCT maker FROM
(SELECT DISTINCT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)) as lowestRam
INNER JOIN product
ON product.model=lowestRam.model
WHERE
lowestRam.speed=(SELECT max(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Group By maker,type HAVING type IN( 'Printer' ,'PC')
不幸的是,当我在检查网站上提交查询时,会产生1个额外的错误结果:(
问题来自Link。 查询验证有2个步骤。第二步仅显示用户和正确结果之间的差异:(
答案 0 :(得分:4)
这可以解决您的问题:
select distinct maker from Product
where type = 'Printer' and maker in (select maker
from Product join PC on Product.model = PC.model
where ram = (select min(ram) from PC) and speed = (select max(speed) from PC
where ram = (select min(ram) from PC)))
答案 1 :(得分:1)
我的查询看起来是正确的(虽然有点过于复杂)。如果您可以提供样本数据和“额外的错误结果”,那么跟踪问题会更容易。
这是我查询的简化版本:
SELECT DISTINCT p1.maker
FROM product p1, pc
WHERE p1.model = pc.model
AND pc.speed = (SELECT MAX (speed)
FROM pc
WHERE ram = (SELECT MIN (ram) FROM pc))
AND EXISTS (SELECT 1 from product p2 where maker = p1.maker and p2.type = 'Printer')
答案 2 :(得分:0)
试试这个:
SELECT p.maker
FROM
(
SELECT *,DENSE_RANK() OVER (ORDER BY ram ASC,speed DESC) AS Rnk
FROM Product p
INNER JOIN (SELECT maker
FROM Product
WHERE type IN ('PC','printer')
GROUP BY maker
HAVING COUNT(DISTINCT type)=2
)p1
ON p1.maker = p.maker
INNER JOIN PC
ON PC.model = p.model
)t
WHERE Rnk=1
答案 3 :(得分:0)
SELECT DISTINCT maker
FROM product
WHERE model IN (
SELECT p.model
FROM pc p JOIN printer r
ON (p.ram =(SELECT min(ram) FROM pc) AND
p.speed=(SELECT max(speed) FROM pc WHERE ram =
(SELECT min(ram) FROM pc))
)
)
答案 4 :(得分:0)
SELECT DISTINCT maker FROM
(SELECT DISTINCT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)) as lowestRam
INNER JOIN product
ON product.model=lowestRam.model AND
lowestRam.speed=(SELECT max(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Group By maker HAVING maker IN( SELECT DISTINCT maker FROM Product WHERE type='Printer')
答案 5 :(得分:0)
选择不同的制造商 从产品,电脑 product.model in (选择型号 来自电脑 速度在哪里(从掌上电脑组中选择最大(速度)) 和ram in (从掌上电脑中选择ram(从电脑中选择min(ram)))) 和product.maker in(从产品中选择制造商,其中type =' printer') 和Product.model = PC.model
答案 6 :(得分:0)
SELECT DISTINCT G.MAKER FROM PC F,PRODUCT G
WHERE
F.MODEL = G.MODEL
AND F.SPEED=
(
SELECT MAX(E.SPEED) FROM PC E WHERE E.RAM =
(
SELECT MIN(C.RAM) FROM PC C,PRODUCT D WHERE D.MAKER IN
(SELECT A.MAKER FROM PRODUCT A,PRINTER B WHERE A.MODEL=B.MODEL)
)
)
答案 7 :(得分:0)
从产品,PC中选择不同的制造商,其中product.model = PC.model和product.type =' PC'和速度=(从PC中选择max(PC.speed),其中ram =(从PC中选择min(PC.ram)))