Top.Mail.Ru
Ответы

Помогите решить пункт Level 3 Step 3 задание 3 в Yandex LMS "SQL шаг за шагом". Уже сотню попыток потратил

Пытаюсь сделать задание даже с ии, но не получаеться

По дате
По рейтингу
Аватар пользователя
Ученик
1мес

Постройте отчёт по использованию клиентами программы лояльности на основе накопляемых и списываемых баллов.

Выведите следующие поля:

  • customer_name;

  • tier_name — уровень лояльности;

  • total_earned_points — сумма начисленных баллов (EARN);

  • total_spent_points — сумма списанных баллов (SPEND).

Используйте данные из таблиц loyalty_point_transactions, loyalty_accounts, customers, loyalty_tiers.

Учитывайте только транзакции типов EARN и SPEND.

Формат вывода

Корректный вывод для тестовой сборки (тестирующая система преобразует вывод запроса в формат TABLE):

12345678910
+-----------------------------------+-----------+---------------------+--------------------+
|           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) ....
Вот задание

Аватар пользователя
Ученик
1мес
1234567891011121314151617181920212223242526
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;



Видео по теме