Помогите решить пункт Level 3 Step 3 задание 3 в Yandex LMS "SQL шаг за шагом". Уже сотню попыток потратил
Пытаюсь сделать задание даже с ии, но не получаеться
Постройте отчёт по использованию клиентами программы лояльности на основе накопляемых и списываемых баллов.
Выведите следующие поля:
customer_name;
tier_name — уровень лояльности;
total_earned_points — сумма начисленных баллов (EARN);
total_spent_points — сумма списанных баллов (SPEND).
Используйте данные из таблиц loyalty_point_transactions, loyalty_accounts, customers, loyalty_tiers.
Учитывайте только транзакции типов EARN и SPEND.
Формат вывода
Корректный вывод для тестовой сборки (тестирующая система преобразует вывод запроса в формат TABLE):
+-----------------------------------+-----------+---------------------+--------------------+
| customer_name | tier_name | total_earned_points | total_spent_points |
+-----------------------------------+-----------+---------------------+--------------------+
| Шашкова Ксения Егоровна | Бронза | 135 | 130 |
| Исаев Изяслав Елизарович | Бронза | 66 | 0 |
| Рыбаков Януарий Бориславович | Бронза | 60 | 0 |
| Мартынов Алексей Терентьевич | Бронза | 58 | 0 |
| Симонова Евпраксия Константиновна | Бронза | 52 | 0 |
| Вишняков Аггей Бенедиктович | Бронза | 51 | 0 |
...Вывод для тестового запроса приведён не полностью из-за величины его размера.
Примечания
Вероятно, при решении задачи для вычисления двух последних полей вам может пригодиться конструкция вида SUM(CASE WHEN ... THEN ... ELSE) ....
Вот задание
SELECT
c.full_name AS customer_name,
t.name AS tier_name,
SUM(CASE
WHEN lpt.tx_type = 'EARN' THEN lpt.points_delta
ELSE 0
END) AS total_earned_points,
ABS(SUM(CASE
WHEN lpt.tx_type = 'SPEND' THEN lpt.points_delta
ELSE 0
END)) AS total_spent_points
FROM loyalty_accounts la
JOIN customers c
ON la.customer_id = c.id
JOIN loyalty_tiers t
ON la.tier_id = t.id
JOIN loyalty_point_transactions lpt
ON lpt.account_id = la.id
GROUP BY
c.id,
c.full_name,
t.name
ORDER BY
total_earned_points DESC,
total_spent_points DESC,
c.id ASC;