SQL MIN (значение) совпадающая строка в PostgreSQL - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующие таблицы:

ТАБЛИЦА A:

 ID          ID NAME      PRICE         CODE      
 00001          B         1000          1       
 00002          A         2000          1       
 00003          C         3000          1       

Вот SQL-код, который я использую:

Select Min (ID),
       Min (ID NAME),
       Sum(PRICE)
From A
GROUP BY CODE

Вот что я получаю:

ID         ID NAME     PRICE         
00001       A          6000   

Как видите, ID NAME не совпадает со значением строки min.Мне нужно, чтобы они совпали.

Я бы хотел, чтобы запрос возвратил следующее

ID         ID NAME     PRICE         
00001       B          6000  

Какой SQL я могу использовать для получения этого результата?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вы можете использовать row_number() функцию:

select min(id), max(case when seq = 1 then id_name end) as id_name, sum(price) as price, code
from (select t.*, row_number() over (partition by code order by id) seq
      from table t
     ) t
group by code;
0 голосов
/ 12 сентября 2018

Вы также можете использовать подзапрос

select t1.*,t2.* from
(select ID,Name from t where ID= (select min(ID) from t)
) as t1
cross join (select sum(Price) as total from t) as t2

https://dbfiddle.uk/?rdbms=postgres_10&fiddle=a496232b552390a641c0e5c0fae791d1

id  name    total
1    B      6000
0 голосов
/ 12 сентября 2018

Если вы хотите одну строку, используйте limit или fetch first 1 row only:

select a.*
from a
order by a.price asc
fetch first 1 row only;

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

select a.*, sum(a.price) over () as sum_prices
from a
order by a.price asc
fetch first 1 row only;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...