Как вернуть наименьшее значение внутри результирующего набора в виде отдельного столбца в SQL?

#sql

#sql

Вопрос:

Я столкнулся со следующим SQL-запросом.

Мой результирующий набор теперь:

 | Id | Customer | Sales |
| 1  | 1        | 10    |
| 2  | 1        | 20    |
| 3  | 2        | 30    |
| 4  | 2        | 40    |
  

Что я хотел бы сделать, так это добавить дополнительный столбец, который показывает наименьшую продажу для этого клиента:

 | Id | Customer | Sales | SmallestSale |
| 1  | 1        | 10    | 10           |
| 2  | 1        | 20    | 10           |
| 3  | 2        | 30    | 30           |
| 4  | 2        | 40    | 30           |
  

Поскольку запрос select для получения этих трех столбцов теперь довольно сложный, я бы хотел избежать подзапросов.

Есть идеи?

Мика

Ответ №1:

Предполагая, что ваша СУБД поддерживает оконные агрегаты

 SELECT  Id, 
        Customer,
        Sales, 
        MIN(Sales) OVER (PARTITION BY Customer) AS SmallestSale 
FROM YourTable
  

Ответ №2:

 select s.Id, s.Customer, s.Sales, sm.SmallestSale 
from Sales s
inner join (
    select Customer, min(sales) as SmallestSale 
    from Sales
    group by Customer
) sm on s.Customer = sm.Customer