#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;