2016-03-31 14 views
0

私のデータベースの1つを含む特定のクエリで助けが必要です。SQLクエリ - 同じテーブル内の2つの値の差を見つける

Name   Elev Difficulty Map   Region 
---------------------------------------------------------- 
Pilot Knob(S) 6200 2  Oynx   Southern Sierra 
Spanish Needle 12322 3  Lament Peak Southern Sierra 
Lamont Peak  7429 2  Lament Peak Southern Sierra 
South Guard  13232 2  Mt Brewer  Great Western Divide 
Mount Brewer 13570 2  Mt Brewer  Great Western Divide 
North Guard  13327 4  Mt Brewer  Great Western Divide 
Midway Mountain 11284 2  Mt Brewer  Great Western Divide 

最高と最低のピークの差が2000フィート以上あるマップを見つける必要がありますか?

MIN()関数とMAX()関数を使用してこれを計算します。 多くのご協力をいただきました!

+1

使用しているデータベースとヒントをあなたの質問にタグを付けてください。 'HAVING'句を使用し –

+0

私はあなたのためのさまざまなソリューションを持っているが、私はできない、あなたが使用しているデータベースにタグを付けていない限り – Licantropo

+0

。 oracle expressを使用してください。 – Scott

答えて

2

あなたはMINとMAXで正しい軌道に乗っています。あなたはマップのグループにそれらを適用する必要があります。このような何か:

SELECT Map 
FROM 
    Table 
GROUP BY 
    Map 
HAVING 
    MAX(Elev) - MIN(Elev) > 2000 
ORDER BY 
    MAX(Elev) - MIN(Elev) 
+0

ありがとうございます!完璧に動作します – Scott

+0

喜んで助けました!与えられた答えをもっと必要としない場合は、答えとしてマークしてください。 – user2316154

+0

少なくとも、最も大きな順序で結果をリストするにはどうしたらいいですか? – Scott

0

あなたの実装に応じて(私は以下のT-SQLで書いて実証してきたあなたは、これらのグループ内の最大値と最小値に基づいてこれらを評価し、グループにマップを集約する必要があります。

--//We're grouping by map and demonstrating the max and min values returned 
select Map, max (elev) as MaxElev, min (elev) as MinElev 
from targettable 
group by map; 

--//We then need to filter the group and only return when the difference is 
--//Greater than 2000 
select map, max (elev) as MaxElev, min (elev) as MinElev 
from targettable 
group by map 
having (Max (elev) - 2000) > min (Elev); 

--//Or alternatively you can use subtract values and compare 

select map, max (elev) as MaxElev, min (elev) as MinElev 
from targettable 
group by map 
having (max (elev) - min (elev)) > 2000; 

--//We can then tidy up and add an order if required (descending shown) 

select map 
from targettable 
group by map 
having (max (elev) - min (elev)) > 2000 
order by max(elev);