2

DB にはいくつかのテーブルがあります。

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

そして、私は見つける必要があります

最も高い価格の製品 (PC、ラップトップ、またはプリンター) のモデル番号を見つけます。結果セット: モデル。

次のクエリを書くことができました:

select model from 
(select model, price from PC
union
select model, price from Laptop
union
select model, price from Printer) G

そして今、セットGからモデルをプロットする必要があります。これには最大価格があります

select句に追加することで最大価格を簡単に選択できます-max(G.price)ですが、モデルとモデルのみが必要です...

どの構文が正しいでしょうか?

前もって感謝します!

4

4 に答える 4

1

これが機能するソリューションです..

SELECT model FROM pc WHERE price >= ALL(SELECT MAX(price) FROM pc UNION SELECT MAX(price) FROM laptop UNION SELECT MAX(price) FROM printer)

連合

SELECT model FROM laptop WHERE price >= ALL(SELECT MAX(price) FROM pc UNION SELECT MAX(price) FROM laptop UNION SELECT MAX(price) FROM printer)

連合

SELECT model FROM printer WHERE price >= ALL(SELECT MAX(price) FROM pc UNION SELECT MAX(price) FROM laptop UNION SELECT MAX(price) FROM printer)

于 2013-01-03T14:14:45.417 に答える
1

最高額だけ?

select model
from
(select 
   model, 
   rank() over (order by max(price) desc) as [rank] 
from 
  (select model, price from PC
   union
   select model, price from Laptop
   union
   select model, price from Printer) u
   group by model) g
where g.rank = 1

申し訳ありませんが、現在、rank() 内で MAX() を使用できるかどうかをテストできません。そうでない場合は、別のサブクエリを追加します。最初に max(price) を決定し、次にランクを決定します。

したがって、RANK() 内の MAX() は機能しています...単純な構文を使用した代替手段:

select top 1 with ties 
  g.model
from
(select 
   u.model, 
   max(u.price) as [maxPrice] 
from 
  (select model, price from PC
   union
   select model, price from Laptop
   union
   select model, price from Printer) u
   group by model) g
order by g.maxPrice desc
  • 編集 1: 単一のレコードのみが期待されるため、「トップ 1」を追加しました
  • 編集2:「トップ1」を削除し、ランクを追加
  • 編集 3: sqlfiddle を使用した後、「モデルごとのパーティション」を削除しました。ありがとう@bluefeet!
  • 編集 4: 代替の「ネクタイあり」を追加。繰り返しになりますが、@bluefeet に感謝します。
于 2013-01-02T19:30:09.623 に答える
0

ジャッコの答えに基づいて、

select model
from
(select model, max(price) as maxPrice 
from 
  (select model, price from PC
   union
   select model, price from Laptop
   union
   select model, price from Printer) u
   group by model) g
where maxPrice = max(maxPrice)

mysqlの代わりに制限1に変更します。

于 2013-01-02T19:45:24.123 に答える
0
SELECT
    model
FROM 
    (
    SELECT model, price, ROW_NUMBER() OVER(ORDER BY price DESC) AS seq FROM PC
    UNION
    SELECT model, price, ROW_NUMBER() OVER(ORDER BY price DESC) AS seq FROM Laptop
    UNION
    SELECT model, price, ROW_NUMBER() OVER(ORDER BY price DESC) AS seq FROM Printer
) final
WHERE
    seq = 1
于 2013-01-02T20:01:38.073 に答える