Поворот и получение #1111 — Недопустимое использование функции группы для этого запроса

#mysql #sql

Вопрос:

Я пытаюсь повернуть и получить #1111 — Недопустимое использование функции группы для этого запроса. Мне действительно нужна помощь здесь.

 SELECT pack.ActionName, up.Name
SUM(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'X', COUNT(tph.UniqueActionPackageId)*pack.TotalPrice, 0)) AS Total_Revenue_X,
AVERAGE(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'X', Total_Revenue_X/COUNT(tph.UniqueActionPackageId),0)) AS Rataan_Kelas_X,
SUM(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'XI', COUNT(tph.UniqueActionPackageId)*pack.TotalPrice, 0)) AS Total_Revenue_XI,
AVERAGE(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'XI', Total_Revenue_XI/COUNT(tph.UniqueActionPackageId),0)) AS Rataan_Kelas_XI,
SUM(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'XII', COUNT(tph.UniqueActionPackageId)*pack.TotalPrice, 0)) AS Total_Revenue_XII,
AVERAGE(IF(SUBSTRING_INDEX(SUBSTRING_INDEX(SchoolYear, ' ', 1), ' ', -1) = 'XII', Total_Revenue_XII/COUNT(tph.UniqueActionPackageId),0)) AS Rataan_Kelas_XII
FROM packages AS pack
JOIN transaction_package_history AS tph ON pack.ActionPackagesId = tph.UniqueActionPackageId
JOIN user_profile AS up ON up.UniqueId = tph.UserId 
GROUP BY pack.ActionName;
 

Ребята, вы можете мне помочь

Комментарии:

1. Отредактируйте свой вопрос и предоставьте примеры данных, желаемые результаты и четкое объяснение того, чего вы пытаетесь достичь. Нерабочий запрос, как правило, не предоставляет много информации.

2. В настоящее время вы пытаетесь смешать функции, которые агрегируются по нескольким строкам (СУММА, КОЛИЧЕСТВО, СРЕДНЕЕ значение), с отдельными столбцами из одной строки; это не сработает. Попробуйте написать на простом английском языке расчет, который вы пытаетесь выполнить, и некоторые примеры данных, которые можно вставить в такой инструмент, как dbfiddle.uk для тестирования решений.

Ответ №1:

Я подозреваю, что вы пытаетесь написать что-то вроде этого:

 SELECT p.ActionName, up.Name
       SUM(CASE WHEN SchoolYear LIKE '%X %' THEN p.TotalPrice END) as Total_Revenue_X,
       AVG(CASE WHEN SchoolYear LIKE '%X %' THEN p.TotalPrice END) as Rataan_Kelas_X,
       SUM(CASE WHEN SchoolYear LIKE '%XI %' THEN p.TotalPrice END) as Total_Revenue_XI,
       AVG(CASE WHEN SchoolYear LIKE '%XI %' THEN p.TotalPrice END) as Rataan_Kelas_XI,
       SUM(CASE WHEN SchoolYear LIKE '%XII %' THEN p.TotalPrice END) as Total_Revenue_XI,
       AVG(CASE WHEN SchoolYear LIKE '%XII %' THEN p.TotalPrice END) as Rataan_Kelas_XI,
FROM packages p JOIN
     transaction_package_history tph
     ON p.ActionPackagesId = tph.UniqueActionPackageId JOIN
     user_profile up
     ON up.UniqueId = tph.UserId 
GROUP BY p.ActionName;