Vertica/SQL:获取每组的中位数
Vertica/SQL: Getting medians per group
在 vertica/sql
中获取每组的平均值很简单
select sym, AVG(qty)
from data
where 1=1
and trading_date = '2018-01-08'
group by sym;
这会为每个符号生成一行,并列出符号及其对应的平均数量。
但是,如果我们将 AVG 替换为 MEDIAN,这似乎不起作用。有没有办法用中位数而不是平均值获得等效的 table (每个符号一行)?
在 KDB 中,这将是微不足道的:
select med qty by sym from data where trading_date=2018.01.08
您可以使用 MEDIAN
window 函数。
select distinct sym, MEDIAN(qty) OVER(PARTITION BY sym)
from data
where trading_date = '2018-01-08'
我觉得很反感,但你可以这样做:
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
当您需要来自无法作为聚合函数使用的分析函数的功能时。
在 vertica/sql
中获取每组的平均值很简单select sym, AVG(qty)
from data
where 1=1
and trading_date = '2018-01-08'
group by sym;
这会为每个符号生成一行,并列出符号及其对应的平均数量。
但是,如果我们将 AVG 替换为 MEDIAN,这似乎不起作用。有没有办法用中位数而不是平均值获得等效的 table (每个符号一行)?
在 KDB 中,这将是微不足道的:
select med qty by sym from data where trading_date=2018.01.08
您可以使用 MEDIAN
window 函数。
select distinct sym, MEDIAN(qty) OVER(PARTITION BY sym)
from data
where trading_date = '2018-01-08'
我觉得很反感,但你可以这样做:
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
当您需要来自无法作为聚合函数使用的分析函数的功能时。