我注意到在大桌子上使用postgres-ntile的奇怪行为。它的顺序不对。例如:
select tile, min(price) as minprice, max(price) as maxprice, count(*)
from (
select ntile(2) over(order by price ASC) as tile, adult_price as price
from statistics."trips"
where back_date IS NULL AND adult_price IS NOT null
and departure = 297 and arrival = 151
) as t
group by tile
依我看,这真是个奇怪的结果:
tile minprice maxprice count
1 2250 5359 74257
2 2250 27735 74257
count和maxprice没什么特别的。对于某些数据集来说可能是正确的。不过,明盘显示,订货有问题。
第二块瓷砖的最低价格怎么能比第一块瓷砖的最高价格低呢?但这是通过检查内部选择的结果来证实的。它只订购了一部分,有些“混合”部分的价格订单被打破。
分为两部分手动显示相同的最低和最高价格,但中间价格不同:
select * from (
select row_number() over (order by adult_price ASC) as row_number, adult_price
from statistics."trips"
where back_date IS NULL AND adult_price IS NOT null
and departure = 297 and arrival = 151
order by price
) as t
where row_number IN(1, 74257, 74258, 148514)
row_number adult_price
1 2250
74257 4075
74258 4075
149413 27735
最佳答案
它一定是令人困惑的列名。
外部查询中的列price
实际上是内部查询中的列adult_price
,而ntile
是由不同的列(price
在内部查询中)按顺序计算的。