Есть ли альтернативный способ использовать предложение LIMIT в подзапросе для N-ых лучших результатов по категориям? - PullRequest
0 голосов
/ 15 января 2019

Использование ключевого слова LIMIT в подзапросе MySQL приводит к следующей ошибке:

Эта версия MySQL еще не поддерживает подзапрос LIMIT & IN / ALL / ANY / SOME.

Есть ли альтернатива этому запросу, которая обеспечит выбор трех верхних строк на основе количества участников в каждой категории MemberAction (Участие / Регистрация / Отмена) на основе критериев участия?

Есть 3 таблицы со следующими столбцами:

1) Промо р

PromoType: ENUM(Form, Meeting, Survey)

PromoID: INT

2) Члены m

PromoID: INT

ProspectID: INT

MemberAction: ENUM(Participate, Signup, Cancel)

3) Проспект пр

ProspectID INT

ProspectName VARCHAR

Теперь я хочу выбрать каждый из 3 типов промо и 3 лучших ProspectNames для каждого типа промо на основе наибольшего количества участников. Мой вывод должен показывать PromoType и ProspectName, ранжированные от большинства до наименьшего количества участников (топ-3) в каждой категории (опрос / форма / собрание).

SELECT p.PromoType, pr.ProspectName, 
    COUNT(m.ProspectID) AS ProspectIDCount
FROM Promo p
 JOIN Members m
    ON p.PromoID = m.PromoID
 JOIN Prospects pr
    ON m.ProspectID = pr.ProspectID
WHERE m.ProspectID IN
    (SELECT DISTINCT ProspectID
    FROM Members m
    WHERE p.PromoType = 'Survey'
        AND m.MemberAction ='Participate'
    ORDER BY p.PromoType, ProspectIDCount DESC
    LIMIT 3)
 UNION ALL
    (SELECT DISTINCT ProspectID
    FROM Members m
    WHERE p.PromoType = 'Form' 
        AND m.MemberAction ='Participate'
    ORDER BY p.PromoType, ProspectIDCount DESC
    LIMIT 3)
  UNION ALL
    (SELECT DISTINCT ProspectID 
    FROM Members m
    WHERE p.PromoType= 'Meeting'
        AND m.MemberAction ='Participate'
    ORDER BY  p.PromoType, ProspectIDCount DESC
    LIMIT 3);

Ожидаемый результат:

Campaign Type                    ProspectName

Survey                          Top Participation

Survey                          2nd Most Participations

Survey                          3rd Most Participations

Form                            Top Participation

Form                            2nd Most Participations

Form                            3rd Most Participations

Meeting                         Top Participation  

Meeting                         2nd Most Participations

Meeting                         3rd Most Participations

Actual Result: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
...