Archive for March 8th, 2009
Analytic functions: SUM, AVG, ROW_NUMBER
In one of the previous articles I wrote about emulating some of analytic functions in MySQL.
Now, I'd like to cover this question more extensively.
A quick reminder: an analytic function is a function that behaves like an aggregate function with one exception: aggregate function returns one last row for each aggregated set, while an analytic function returns intermediate results too.
An analytic function can be made out of almost all aggregate functions by adding keyword OVER
to them with two additional clauses: PARTITION BY
and ORDER BY
.
PARTITION BY
is analog of GROUP BY
. ORDER BY
defines order in which the intermediate rows will be evaluated.
The behaviour of analytic functions can probably be best illustrated with an example:
Read the rest of this entry »