Как создать результирующий набор с максимальным значением каждого TILE и количеством итенов в этом TILE - PullRequest
1 голос
/ 17 апреля 2019

Если у меня есть такая таблица

id product_name  price

1   product_1     5    
2   product_2     10 
3   product_3     100
4   product_4     200   
5   product_5     9000     

Если я выполню запрос, подобный следующему:

 select  price,  ntile(3) over(order by price) as rank from products order by price.

Результат будет примерно такой:

   id  product_name   price       rank

    1   product_1     5             1
    2   product_2     10            1
    3   product_3     100           2
    4   product_4     200           2
    5   product_5     9000          3

Но я бы хотел немного расширить это и получить максимальное значение для каждой плитки и количество итенов на этой плитке.

   price    items
    10       2
    200      2
    9000     1  // I think I won't use the last tile max value, but it's here anyway.

У меня нет кнута, чтобы получитьрезультат, который я хочу, поэтому я мало помощи приветствую.

1 Ответ

0 голосов
/ 17 апреля 2019

Как насчет использования агрегации?

select max(price), count(*)
from (select price,  ntile(3) over (order by price) as rank
      from products
     ) p
group by rank
order by price

Только предостережение: ntile() создает ячейки одинакового размера, поэтому граничные значения могут быть разбиты по нескольким ячейкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...