2016-03-31 5 views
0

Мне нужна помощь с конкретным запросом, связанным с одной из моих баз данных.SQL Query - поиск разницы между двумя значениями в одной таблице

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

Рад, что это помогло! ber, чтобы отметить как ответ, если вам не нужно больше ответов. – 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);