如何为中位数创建聚合函数?

时间:2012-06-18 21:42:15

标签: sql math advantage-database-server median

我需要在Advantage-Database中创建一个聚合函数来计算中值。

SELECT 
    group_field
  , MEDIAN(value_field) 
FROM 
  table_name
GROUP BY 
  group_field

似乎我发现的解决方案对于使用的sql引擎非常具体。

2 个答案:

答案 0 :(得分:2)

在ADS中没有内置的中间聚合函数,如帮助文件中所示:

http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/index.html

我担心你必须编写自己的存储过程或sql脚本来解决这个问题。

以下问题的接受答案可能是您的解决方案: Simple way to calculate median with MySQL

答案 1 :(得分:0)

这有点冗长,但确实有效,而且速度相当快。

SELECT  x.group_field, 
        avg(
            IF( 
                ABS(x.rank - y.vol/2) < 1, 
                value_field, 
                null
            )
        ) as median
FROM (
    SELECT  group_field, value_field, 
            @r:= IF(@current=group_field, @r+1, 1) as rank, 
            @current:=group_field
    FROM (
        SELECT group_field, value_field
        FROM table_name
        ORDER BY group_field, value_field
    ) z, (SELECT @r:=0, @current:='') v
) x, (
    SELECT group_field, count(*) as vol 
    FROM table_name
    GROUP BY group_field
) y WHERE x.group_field = y.group_field
GROUP BY x.group_field