3

製品、PC、ラップトップ、およびプリンターの 4 つのテーブルがあります。

    Products(maker, model, type)
    PC(code, model, speed, hd, cd, price)
    Laptop(code, model, speed, ram, hd, screen, price)
    Printer(code, model, color, type price)

私が必要としているのは、価格が最も高い製品 (PC、ラップトップ、またはプリンター) のモデル番号を見つけることです。2 つのモデル番号の価格が最も高い場合、両方を表示する必要があり、case を使用すると 1 つだけが選択され、case ステートメントが終了するため、これは case ステートメントでは機能しません。UNION 演算子を使用してこれを実行したいのですが、その方法がわかりません。これは私がこれまでに持っているものです:

SELECT model FROM 
(SELECT model, MAX(price) FROM 
(SELECT model, price FROM Pc UNION ALL SELECT model, price FROM Laptop UNION ALL 
 SELECT model, price FROM Printer) 
 GROUP BY model)

しかし、これは間違った構文であり、その理由はわかりません。何か案は?

4

5 に答える 5

3
Select datatable.model as price from (
    Select P.model,P.price from PC P where P.price=(select Max(Q.price) from PC Q)
    Union 
    Select P.model,P.price from Laptop P where P.price=(select Max(Q.price) from Laptop Q)
    Union 
    Select P.model,P.price from Printer P where P.price=(select Max(Q.price) from Printer Q)
) as datatable where datatable.price=(
    Select Max(newtable.price) as price from (
        Select P.model,P.price from PC P where P.price=(select Max(Q.price) from PC Q)
        Union 
        Select P.model,P.price from Laptop P where P.price=(select Max(Q.price) from Laptop Q)
        Union 
        Select P.model,P.price from Printer P where P.price=(select Max(Q.price) from Printer Q)) as newtable)
于 2012-05-09T07:42:18.290 に答える
1

派生テーブルにエイリアスを設定する必要があります:この投稿を参照してください


編集:これは、最大価格のモデルを取得するために機能するはずです。(これが SQL サーバーの正しい構文かどうかはわかりません。)

with max_price(price) as (
  SELECT MAX(price)
       FROM (
          SELECT price
          FROM Pc
          UNION ALL
          SELECT price
          FROM Laptop
          UNION ALL 
          SELECT price
          FROM Printer
       ) as sub1
)

SELECT model, price
FROM (
   SELECT model, price
   FROM Pc
   UNION ALL
   SELECT model, price
   FROM Laptop
   UNION ALL 
   SELECT model, price
   FROM Printer
) as sub2
JOIN max_price m ON m.price = sub2.price
于 2011-07-19T20:25:32.723 に答える
0
Select b.model from
(Select a.model, Max(a.price) as price from
(Select model, MAX(price) as price from PC group by model
union
Select model, MAX(price) as price from Laptop group by model
union
Select model, MAX(price) as price from Printer group by model)a
Group by a.model)b
where b.price=(Select Max(c.price) from(Select model, MAX(price) as price from PC group by model
union
Select model, MAX(price) as price from Laptop group by model
union
Select model, MAX(price) as price from Printer group by model)c)
于 2014-01-24T17:59:49.403 に答える