Комментарии 1
Мне показалось автор перемудрил. Из разряда ну зачем то же нужны эти CTE. Так и не понял что смутило в оконных функциях.
SELECT id, SUM(d) OVER tzw2
FROM
(
SELECT 2 - (LAG(y, 1, 0) OVER tzw = y AND LAG(x, 1, -1) OVER tzw = x - 1) AS d, y ,x ,id
FROM seats
WHERE venue_id = @venue_id
WINDOW tzw AS (ORDER BY y, x)
) t WINDOW tzw2 AS (ORDER BY y, x);
я не специалист в MySQL, пускай тот кто понимает объяснит чем этот ANALYZE хуже? Судя по кост модели так гораздо выгодней и имхо читабельней.
| -> Window aggregate with buffering: sum(t.d) OVER tzw2 (actual time=0.132..0.139 rows=5 loops=1)
-> Sort: t.y, t.x (actual time=0.008..0.008 rows=5 loops=1)
-> Table scan on t (actual time=0.000..0.001 rows=5 loops=1)
-> Materialize (actual time=0.121..0.122 rows=5 loops=1)
-> Window aggregate with buffering: lag(seats.x,1,-(1)) OVER tzw, lag(seats.y,1,0) OVER tzw (actual time=0.051..0.106 rows=5 loops=1)
-> Sort: seats.y, seats.x (cost=0.75 rows=5) (actual time=0.030..0.031 rows=5 loops=1)
-> Index lookup on seats using venue_id_y_x (venue_id=(@venue_id)) (actual time=0.015..0.018 rows=5 loops=1)
|
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Применение оконных функций и CTE в MySQL 8.0 для реализации накопительного итога без хаков