Я продаю подписки на мой онлайн-курс, а также курсы в розницу.Я бы принес "топ-5" самых продаваемых планов / курсов.Для этого у меня есть таблица с названием «subscriptionPlan», в которой хранится идентификатор приобретенного плана или, в случае курса, идентификатор курса и сумма, потраченная на эту транзакцию.Пример:
таблица subscriptionPlan
sbpId | subId | plaId | couId | sbpAmount
1 | 1 | 1 | 1 | 499.99
2 | 2 | 1 | 2 | 499.99
3 | 3 | 2 | 0 | 899.99
4 | 4 | 1 | 1 | 499.99
Просто для образовательных целей, plaId = 1 - это план под названием «Single Sale», который я создал, чтобы сохранить целостностьБД.Когда couId не пуст, вы также купили отдельный курс, а не план, в котором вы можете посещать любой курс.
Мне нужно: Перечислите 5 лучших продаж.Если это план, отобразите имя плана (таблица плана, столбец plaTitle).Если это курс, отобразите его название (таблица курс, colna couTitle).Это логика, которую я не могу кодировать.Я смог оценить топ-5 ПЛАНОВ, но он группирует курсы, так как GROUP BY по идентификатору плана.Я считаю, что шалость здесь, может быть, создание IF / ELSE в этом GROUPBY, но я не знаю, как это сделать.
Запрос, который я кодирую, чтобы ранжировать мои топ-5 планов:
SELECT sp.plaId, sp.couId, p.plaTitle, p.plaPermanent, c.couTitle, SUM(sbpAmount) AS sbpTotalAmount
FROM subscriptionPlan sp
LEFT JOIN plan p ON sp.plaId = p.plaId
LEFT JOIN course c ON sp.couId = c.couId
GROUP BY sp.plaId
ORDER BY sbpTotalAmount DESC
LIMIT 5
Результат, который я ожидал, был:
plaId | couId | plaTitle | couTitle | plaPermanent | sbpTotalAmount
1 | 1 | Venda avulsa | Curso 01 | true | 999.98
2 | 0 | Acesso total | null | false | 899.99
3 | 2 | Venda avulsa | Curso 02 | true | 499.99
Как мне попасть в эту формулу запроса?