SQL-запрос наибольшее и наименьшее количество - PullRequest
1 голос
/ 09 января 2012

У меня есть таблица Sales со следующими полями: code, amount, index, name.

Мне нужно получить самое маленькое и самое большое amount для данного name и code, для которого сумма является самой маленькой и самой большой.

Может ли кто-нибудь помочь мне в создании запроса?

Ответы [ 3 ]

4 голосов
/ 09 января 2012

Если вам доступны CTE и row_number ().

with S as 
(
  select Amount,
         Code,
         row_number() over(order by Amount asc) as rn1,
         row_number() over(order by Amount desc) as rn2
  from Sales
  where Name = 'SomeName'       
)
select SMin.Amount as MinAmount,
       SMin.Code as MinCode,
       SMax.Amount as MaxAmount,
       SMax.Code as MaxCode
from S as SMin
  cross join S as SMax
where SMin.rn1 = 1 and
      SMax.rn2 = 1
2 голосов
/ 09 января 2012

Чтобы найти минимальную и максимальную сумму на имя:

select
   name
   min(amount), max(amount)
from
  sales
group by name

и получить как (минимальный, так и максимальный) и код в одном запросе:

select *
from sales s
where 
       (amount = (select
                   max(s1.amount)
                 from sales s1
                 where  s1.name = s.name)
        or
        amount = (select
                   min(s2.amount)
                 from sales s2
                 where  s2.name = s.name)
       )
1 голос
/ 09 января 2012

Предполагая, что это Postgres, попробуйте следующее:

select name, 
       amount, 
       code,
       case when min_rank=max_rank then 'Minimum and Maximum'
            when min_rank=1 then 'Minimum'
            else 'Maximum'
       end as min_or_max
from
(select s.*,
        rank() over (partition by name order by amount) min_rank,
        rank() over (partition by name order by amount desc) max_rank
 from sales s) v
where 1 in (min_rank, max_rank)
...