Vertica / SQL:获得每组中位数

时间:2018-02-15 14:52:03

标签: sql vertica

直接在vertica / sql中获得每组的平均值

select sym, AVG(qty)
from data
where 1=1
and trading_date = '2018-01-08'
group by sym;

这为每个sym生成一行,并列出sym及其对应的平均数量。

但是,如果我们用MEDIAN替换AVG,这似乎不起作用。有没有办法用中位数而不是平均值来获得等效表(每个sym一行)?

在KDB中,这将是微不足道的:

select med qty by sym from data where trading_date=2018.01.08

2 个答案:

答案 0 :(得分:1)

您可以使用MEDIAN窗口功能。

select distinct sym, MEDIAN(qty) OVER(PARTITION BY sym) 
from data
where trading_date = '2018-01-08'

答案 1 :(得分:0)

我觉得这很令人反感,但你可以做到:

select distinct sym, AVG(qty) over (partition by sum) as avg_qty,
       median(qty) over (partition by sum) as median_qty
from data
where 1=1 and trading_date = '2018-01-08';
当您需要来自不能用作聚合函数的分析函数的功能时,使用

select distinct代替group by