Бран · продюсер «Хроник Пограничья»
Хочу на стену два графика: выручку по месяцам и какие классы выбирают на каких платформах. Геймдизайнеры говорят, маги это «айфонный» класс. Правда?
В прошлом уроке мы выбирали форму графика под вопрос. Теперь соберём график из запроса: поймём, какая колонка уходит на ось, какая становится высотой столбца, а какая цветом.
Измерения и меры
Любой график из запроса держится на двух видах колонок.
Измерение отвечает на «по чему режем»: месяц, класс, платформа. В SQL это то, что стоит в GROUP BY. Мера отвечает на «что считаем»: выручку, число персонажей, средний чек. В SQL это агрегат: sum, count, avg.
Во вкладке «График» песочницы это три поля: «Ось X» это первое измерение, «Меры» это одна или несколько числовых колонок, «Разбивка цветом» это второе измерение, если оно есть.
Линия: выручка по месяцам
Одно измерение (месяц) и одна мера (выручка). Выручку берём чистую, как в боссе Пограничья: только оплаченные покупки, без тестовых аккаунтов и без повторов одного чека.
WITH clean AS (
SELECT p.*
FROM purchases p
JOIN players pl ON pl.id = p.player_id
WHERE p.status = 'paid'
AND pl.email NOT LIKE '%@studio.dev'
AND p.id IN (SELECT min(id) FROM purchases GROUP BY receipt_id)
)
SELECT date_trunc('month', created_at)::date AS month,
sum(amount_rub) AS revenue
FROM clean
GROUP BY month
ORDER BY month;
month | revenue
------------+-----------
2026-01-01 | 55387.00
2026-02-01 | 62880.00
2026-03-01 | 162521.00
2026-04-01 | 183764.00
2026-05-01 | 122640.00
2026-06-01 | 70564.00
На линии видно гору: рост в марте, пик в апреле и спад после релиза 2.0 в мае и июне. Точки идут в порядке ORDER BY month. График не сортирует сам: если убрать ORDER BY, месяцы могут встать вразнобой.
Столбцы с разбивкой: классы по платформам
Теперь два измерения: класс и платформа. Запрос возвращает их в длинном формате, по строке на пару «класс, платформа»:
SELECT c.class, p.platform, count(*) AS characters
FROM characters c
JOIN players p ON p.id = c.player_id
GROUP BY c.class, p.platform
ORDER BY c.class, p.platform;
class | platform | characters
---------+----------+------------
mage | android | 644
mage | ios | 372
mage | pc | 262
priest | android | 405
...
warrior | pc | 293
Во вкладке «График» ставим «Ось X» = class, «Меры» = characters, «Разбивка цветом» = platform. Песочница сама разложит строки по сериям: у каждого класса три столбца, по цвету на платформу. Повторы одной пары «категория, серия» график суммирует, поэтому запрос лучше сразу группировать до нужного уровня.
То же можно получить в широком формате: count(*) FILTER (WHERE p.platform = 'ios') AS ios и так далее, а в «Мерах» отметить три колонки. Для графика оба варианта равноценны. Длинный удобнее, когда значений второго измерения много или они заранее неизвестны.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.