2017-01-10 4 views
0

Допустим, мы имеем эту таблицу:Как вы можете выбрать строку с более высоким значением в SQL?

---------- 
number |name| price 
---------- 
1  | a | 2 
---------- 
1  | b | 4 
---------- 
2  | c | 4 
---------- 
3  | d | 6 
---------- 

Я хочу, чтобы выбрать число и их высокую цену. Итак, как я могу выбрать только строку с номером 1, которая имеет более высокую цену и не отображает другую ?. Моя проблема - второй столбец.

+1

http://stackoverflow.com/questions/tagged/postgresql+greatest-n-per-group –

+0

Да, но тогда я не увижу других номеров и их цены – Geddi

+0

'2' выше, чем' 4'? – wildplasser

ответ

1

Easy: GROUP BY

select number, max(price) 
from your_table 
group by number; 

Если у вас есть несколько столбцов, и вы хотите, чтобы выбрать строку с максимальной ценой, используйте:

select * 
from (select 
    t.*, 
    row_number() over (partition by number order by price desc) rn 
from your_table t) t 
where rn = 1; 
+0

Итак, скажем, у меня есть другой столбец и с разными значениями для обоих элементов с номером 1. Если я тогда группирую их оба без смысла – Geddi

+0

, и вы хотите, чтобы значение в этом столбце соответствовало максимальной цене? – GurV

+0

Да, я хочу, чтобы линия с номером 1 имела самую высокую цену независимо от того, что значение в другом столбце могло бы быть – Geddi

1

В Postgres, наиболее эффективным способом, чтобы получить строка с наивысшим price для каждого number является использование distinct on:

select distinct on (number) t.* 
from t 
order by number, price desc;