powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SUM и LIMIT с GROUP как это написать ???
4 сообщений из 4, страница 1 из 1
SUM и LIMIT с GROUP как это написать ???
    #39699858
Indimions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, целый день бьюсь над запросом SQL запрос, который выводит по каждому человеку средний бонус в 2017 и 2018 годах,
из последних по дате 6-ти бонусов (которые не 0)
В агрегационных функциях лимит не работает и это все усложняет...
База
http://joxi.ru/Vm6bOeMiDE4njm

Сначала было так
Код: sql
1.
SELECT employeeId, AVG(bonus_2017), AVG(bonus_2018) FROM SalaryBonus WHERE bonus_2018 <> 0 AND bonus_2017 <> 0 GROUP BY employeeId



Но не то...

потом было так
Код: sql
1.
SELECT employeeId, AVG(CASE WHEN bonus_2017 <> 0 THEN bonus_2017 ELSE 0 END) as bonus_2017, AVG(CASE WHEN bonus_2018 <> 0 THEN bonus_2018 ELSE 0 END) as bonus_2018 FROM SalaryBonus GROUP BY employeeId LIMIT 6



Но тоже не то,
потом было так
Код: sql
1.
SELECT  sal1.employeeId, bb, aa FROM SalaryBonus sal1 LEFT JOIN(SELECT  employeeId, AVG(bonus_2018) as aa FROM SalaryBonus WHERE bonus_2018 <> 0 GROUP BY  employeeId LIMIT 6) as sal2 USING (employeeId) LEFT JOIN (SELECT  employeeId, AVG(bonus_2017) as bb FROM SalaryBonus WHERE bonus_2017 <> 0 GROUP BY  employeeId LIMIT 6 ) as sal3 USING (employeeId) GROUP BY sal1.employeeId



И опять не то, и вот теперь так, но тоже не то
Код: sql
1.
2.
3.
SELECT  employeeId e, (SELECT employeeId , SUM(bonus_2017) FROM 
                      (SELECT employeeId,bonus_2017 FROM SalaryBonus WHERE bonus_2017 <>0  LIMIT 6) as aaa) as b2017
                      FROM  SalaryBonus as asd GROUP BY employeeId


результат http://joxi.ru/xAeenlkfpaRyZA (только первый сотрудник получает бонус... до остальных по лимиту не доходит)
Последний запрос решил бы проблему но не могу пробросить сюда
Код: sql
1.
(SELECT employeeId,bonus_2017 FROM SalaryBonus WHERE bonus_2017 <>0  LIMIT 6) 


значения столбца employeeId e что бы получилось типа так
Код: sql
1.
(SELECT employeeId,bonus_2017 FROM SalaryBonus WHERE bonus_2017 <>0 AND e=employeeId  LIMIT 6) 


Пишет что нет такого слтобца, как не пытался, не удалось его туда пробросить, хотя это бы все решило...

Помогите решить данную задачу, уже не знаю что придумать... (дамп приложил)
...
Рейтинг: 0 / 0
SUM и LIMIT с GROUP как это написать ???
    #39699884
Indimions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробывал так
Код: sql
1.
2.
3.
SELECT @a := employeeId,  (SELECT AVG(bonus_2017) FROM (SELECT bonus_2017, month FROM SalaryBonus 
                                 WHERE employeeId = @a LIMIT 6 ) as bbb
                          WHERE  employeeId = @a) FROM SalaryBonus GROUP BY employeeId



но результат все тот же, как будто в @a один раз записалось 1 и передалось в подзапрос... хотя по факту видно же что @a меняет значение...
Код: plaintext
1.
2.
3.
@a  Подзапрос AVG
1     1650.0000
2     1650.0000
3     1650.0000
...
Рейтинг: 0 / 0
SUM и LIMIT с GROUP как это написать ???
    #39700127
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Indimions...из последних по дате 6-ти бонусов (которые не 0)...
F.A.Q.: Нумерация строк и другие вопросы про использование переменных -
...
Рейтинг: 0 / 0
SUM и LIMIT с GROUP как это написать ???
    #39710672
algrach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выводит employeeId и средний бонус в 2017 и 2018 годах
Код: sql
1.
select distinct employeeId, avg(bonus_2017) OVER (partition by employeeId)b2017, avg(bonus_2018) OVER (partition by employeeId)b2018 from salarybonus;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SUM и LIMIT с GROUP как это написать ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]