mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
21651541ce
It is based on the sum() function, thus much of the logic is shared. Considering that there are 2 counters stored within the function, one that handles the null value, while the other that handles the divisor for the avg computation, it is possible to remove the counter from the Item_sum_avg. I have not removed it in this patch as we may choose to refactor the whole code into a separate class. This remains to be dicussed.
47 lines
919 B
Text
47 lines
919 B
Text
create table t1 (
|
|
pk int primary key,
|
|
a int,
|
|
b int,
|
|
c real
|
|
);
|
|
|
|
|
|
insert into t1 values
|
|
(101 , 0, 10, 1.1),
|
|
(102 , 0, 10, 2.1),
|
|
(103 , 1, 10, 3.1),
|
|
(104 , 1, 10, 4.1),
|
|
(108 , 2, 10, 5.1),
|
|
(105 , 2, 20, 6.1),
|
|
(106 , 2, 20, 7.1),
|
|
(107 , 2, 20, 8.15),
|
|
(109 , 4, 20, 9.15),
|
|
(110 , 4, 20, 10.15),
|
|
(111 , 5, NULL, 11.15),
|
|
(112 , 5, 1, 12.25),
|
|
(113 , 5, NULL, 13.35),
|
|
(114 , 5, NULL, 14.50),
|
|
(115 , 5, NULL, 15.65),
|
|
(116 , 6, 1, NULL),
|
|
(117 , 6, 1, 10),
|
|
(118 , 6, 1, 1.1),
|
|
(119 , 6, 1, NULL),
|
|
(120 , 6, 1, NULL),
|
|
(121 , 6, 1, NULL),
|
|
(122 , 6, 1, 2.2),
|
|
(123 , 6, 1, 20.1),
|
|
(124 , 6, 1, -10.4),
|
|
(125 , 6, 1, NULL),
|
|
(126 , 6, 1, NULL),
|
|
(127 , 6, 1, NULL);
|
|
|
|
|
|
--sorted_result
|
|
select pk, a, b, avg(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
|
from t1;
|
|
|
|
--sorted_result
|
|
select pk, a, c, avg(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
|
from t1;
|
|
|
|
drop table t1;
|