我需要在Advantage-Database中创建一个聚合函数来计算中值。
SELECT
group_field
, MEDIAN(value_field)
FROM
table_name
GROUP BY
group_field
似乎我发现的解决方案对于使用的sql引擎非常具体。
答案 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