如果有分区需求,先对数据分区排序;没有分区需求,则直接对数据排序。
如果有分区需求,求每个分区的总数;没有分区需求,则直接求总行数。
如果有分区需求,筛选排序值 = 分区总数 * 分位数,则可以得到每个分区的分位数;
没有分区需求,筛选排序值 = 总行数 * 分位数,则可以得到分位数。
具体例子如下:
例子中value表示我们想取分位数的列值;orderNum为排序序号;nums为分区总行数;dt为分区。如果没有分区需求,去掉dt相关的部分即可。
最终结果是取了value的0.25分位,0.5分位,0.75分位,0.9分位。具体想取多少分位,直接改数值即可。
selectt1.dt, value,orderNum,nums,round(orderNum / nums, 2) as quartile
from(SELECTdt,value,row_number() over (partition by dt order by value) as orderNumFROMbase_table) t1left join (selectdt,count(*) as numsfrombase_tablegroup by dt) t2 on t1.dt = t2.dtwhere orderNum = floor(nums * 0.25) or orderNum = floor(nums * 0.5) or orderNum = floor(nums * 0.75) or orderNum = floor(nums * 0.90)