value是a和b的类型

时间:2013-06-13 14:01:14

标签: sql

对于给定的数据库

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)

问题是: 找到能够生产RAM最低的PC和具有最低RAM的PC中最高速处理器的打印机制造商。结果集:制造商。

让我们分开查询!

  • 找到也生产PC的打印机制造商
  

从产品Group By制造商中选择DISTINCT制造商,输入HAVING类型   IN('打印机','PC')

我认为这是错误的,因为IN('Printer','PC')就像OR not AND

  • 内存最低的PC
  

SELECT模型,速度FROM pc WHERE ram =(SELECT MIN(ram)FROM pc)as lowestRam

  • RAM率最低的PC中的最高速处理器
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个步骤。第二步仅显示用户和正确结果之间的差异:(

8 个答案:

答案 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)))