Для начала вам понадобится справочная таблица. Из вашего изображения у вас есть что-то под названием users
, но на самом деле подойдет любая (достаточно большая) таблица.
Итак, для начала вы создадите справочную таблицу, используя функцию rank()
или row_count()
. Или, если в вашем users.id
нет пробелов, это еще проще использовать.
SELECT *, rank() OVER (ORDER BY id) as reference_value FROM users
Это сгенерирует таблицу 1....n
для users
.
Теперь вы присоединяетесь к этому, но отсчитываете от объединенной таблицы:
SELECT
a.reference_value, count(b.num_opens) as total
FROM
(SELECT rank() OVER (ORDER BY id) as reference_value from users) a
LEFT JOIN
[whatever table] b ON a.reference_value = b.num_opens
GROUP BY
a.reference_value
Но это слишком много строк! У вас определенно больше пользователей, чем рассчитано этим событием. Так что добавьте туда быстрый фильтр.
SELECT
a.reference_value, count(b.num_opens) as total
FROM
(SELECT rank() OVER (ORDER BY id) as reference_value from users) a
LEFT JOIN
[whatever table] b ON a.reference_value = b.num_opens
WHERE
a.reference_value <= (SELECT max(num_opens) FROM [whatever table])
GROUP BY
a.reference_value