2

特定のデータベースの場合

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

問題は 、最小の RAM を搭載した PC と、最小の RAM を搭載した PC の中で最高速度のプロセッサを搭載した PC を製造しているプリンター メーカーを見つけることです。結果セット: メーカー。

クエリを分割しましょう!

  • PCも生産しているプリンターメーカーを探す

SELECT DISTINCT maker from product Group by maker,type HAVING type IN('Printer','PC')

IN('Printer','PC') は OR ではなく AND のようなものなので、これは間違っていると思います

  • RAM が最小の PC

SELECT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc) を最小ラムとして

  • 最も低い 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 つのステップがあります。2番目のステップは、ユーザーと正しい結果の違いのみを示しています:(

4

8 に答える 8

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')  
于 2013-06-13T14:53:06.757 に答える
0

product,pc where product.model in (select model from pc where speed in (select max(speed) from ram by pc) and ram in (select ram from pc where ram in (select min(ram) from からのラムを選択) pc))) および product.maker in (type = 'printer' の製品からメーカーを選択) および Product.model=PC.model

于 2014-04-30T09:54:32.113 に答える
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)
  )
)
于 2014-07-13T17:15:09.487 に答える
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))
                     )
                 )
于 2013-09-10T05:26:56.613 に答える
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
于 2013-06-13T14:38:20.513 に答える
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')
于 2013-10-14T21:22:59.037 に答える
0

product.model=PC.model and product.type='PC' and speed=(select max(PC.speed) from PC where ram=(select min(PC.ram) from PC) 製品から個別のメーカーを選択します。 )

于 2014-11-09T00:35:53.127 に答える