>_ IzzyLab

Практическое задание

SQLite: общее табличное выражение (CTE)

средне

В базе /root/pay.db есть таблица payments(user TEXT, amount INTEGER) с платежами. Нужно найти «VIP»-пользователей, у которых суммарная сумма платежей строго больше 100. Составь запрос с общим табличным выражением (WITH ... AS (...)): сначала во вспомогательной таблице посчитай сумму по каждому пользователю, затем отбери из неё тех, у кого сумма > 100. Запиши имена в /root/vip.txt (по одному в строке).

Что потренируешь:
  • cte
  • with
  • агрегация
  • group by
  • фильтрация по агрегату

Разбор темы

Общее табличное выражение (CTE) — это именованный подзапрос, объявленный через WITH <имя> AS (...) до основного запроса; к нему потом обращаются по имени, как к обычной таблице. Такой приём удобен, когда нужно отфильтровать данные по агрегату: в WHERE агрегатные функции использовать нельзя, поэтому сумму сначала считают во вложенном шаге (GROUP BY + агрегат с псевдонимом), а внешний запрос уже фильтрует готовый результат. Альтернатива CTE для фильтра по агрегату — HAVING, но WITH делает многоступенчатую логику читабельнее.

Что проверяется

  1. VIP-пользователи попали в отчёт
  2. пользователь с малой суммой отсеян

Как это выглядит