2017-03-29 29 views
1

私は3つのテーブルを持っています:ノートパソコン、PC、モデルと価格のフィールドを持つプリンタ。maxフィールドに関連する選択

これらのすべてのテーブルのすべての製品の中で最大の価格を取得する必要があります。

は、私は各テーブルの最大価格&モデルフィールドを取得するために労働組合をした:その結果

SELECT model,price 
FROM (SELECT model, price 
     FROM pc 
     WHERE price = (SELECT MAX(price) FROM pc) 
     UNION 
     SELECT model, price 
     FROM laptop 
     WHERE price = (SELECT MAX(price) FROM laptop) 
     UNION 
     SELECT model, price 
     FROM printer WHERE price = (SELECT MAX(price) FROM printer) 
    ) AS X 

、私は

モデルを受け取っ|価格


1233 | 980.0000 
1276 | 400.0000 
1288 | 400.0000 
1750 | 1200.0000 

そして今、私は最高の価格で(この場合には、それは「1750」となります)のみのモデルを取得してこだわっています。

+0

Huh?あなたのテーブル、データ、そしてあなたが望むものについていくつかの詳細を投稿できますか?ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

これを行う1つの方法は、代わりにMAX価格を最後にソートすることです組合の各レベルで例えばSELECTモデル、価格FROM(SELECTモデル、RN = ROW_NUMBER()オーダー(ORDER BY価格DESC)FROM(SELECT UNIT ALL SELECTモデル、 AS T WHERE RN = 1; – ZLK

+0

http://prnt.sc/eq934p - ここではDB構造を理解しています – vitasya

答えて

1

order bytopの使用についてはどうですか?

SELECT TOP 1 model, price 
FROM (SELECT model, price 
     FROM pc 
     UNION ALL 
     SELECT model, price 
     FROM laptop 
     UNION ALL 
     SELECT model, price 
     FROM printer 
    ) t 
ORDER BY price DESC; 

注:インデックスがある場合、これはおそらく、必要な情報を取得する最も効率的な方法ではありません。パフォーマンスが問題になる場合は、テーブルとそのデータの設計に関する詳細情報を提供する必要があります。

+1

あなたは数秒で私を打ち負かしています...ちょっと言えば:WITH TIESを使う必要があるかもしれませんが、最高価格が同じ複数の製品を期待している場合...そうでなければOPの結果はむしろランダムです... – Shnugo

1

これはゴードンの答えとは異なる実行計画を作成する場合、私は知らないunion alltop 1

select top 1 model, price 
from (
    select top 1 model, price 
    from pc 
    order by price desc 

    union all 

    select top 1 model, price 
    from laptop 
    order by price desc 

    union all 

    select top 1 model, price 
    from printer 
    order by price desc 
) as u 
order by price desc 

を使用して...私は探しに行くためにオフです。

この回答は、SQL Server 2012でゴードンの答えとしてsame query execution planを生成しています.Gordonの方がより簡潔であるため、私はその点を検討します。

+0

Gordonの回答と同じです:同じ高値を持つ複数の製品がある場合はどうでしょうか?あなたはこれに対処するために 'WITH TIES'を追加するかもしれません... – Shnugo

+0

@ Shnugo私は'結びつき 'に精通していますが、私はOPが探していた印象を得られませんでした。 – SqlZim

+0

まあ、OPはこの可能性を認識していなかったという印象を受けました:-D。しかし、この例では、同じ最高価格を持つ2つの製品があります。この場合、返される製品はむしろランダムです... – Shnugo

関連する問題