如何使用每个TILE的最大值和该TILE中的itens数创建结果集

时间:2019-04-17 19:52:24

标签: sql mariadb postgresql-9.6

如果我有这样的桌子

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

但是我想进一步扩展它,以获取每个图块的最大值以及该图块上的itens数量。

   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 :(得分:0)

仅使用聚合怎么样?

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()将创建大小相等的容器,因此边界值可能会拆分为多个容器。