SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.08.2019 21:06:23

Дипер
Участник
Зарегистрирован: 10.08.2019
Сообщений: 1

Вывести по 2 лучших работника из каждого отдела

Создать список из 2  лучших продажников по сумме продаж по каждому отделу, упорядоченных  сумму продаж (по убыванию).

Например так
---------------------------------------------
Отдел    Сотрудник        Сумма макс
1            Пупкин           1000
1            Петров           200

2            Сидров          900
2           Васильев            300
---------------------------------------------
Dep – таблица отделов:
Id – номер
Otdel – отделs

Personal – таблица сотрудники:
Id – номер
Fio – Фамилия сотрудника
Dep_id – отдел (ссылка на Dep.Id)

Sal – таблица продаж:
Id – номер
Personal_id – менеджер (ссылка на Personal.Id)
Summa– сумма продажи

Вывожу запрос следующий. Выдает полный список сотрудников и суммы продаж.


select Otdel , Fio,sum(Summa)
from Sal, Personal, Dep
where Personal.id = Sal.Personal_id and Dep.id=Dep_id
group by Fio, Otdel  
ORDER BY `sum(Summa)`  DESC
 


Ставлю Limit 2, что выдает два максимальных, но не по отделам
---------------------------------------------
Отдел    Сотрудник        Сумма
1            Пупкин           1000
2            Сидров          900
---------------------------------------------
Нашел отличную статью https://sqlinfo.ru/articles/info/45.html , но в конец запутался. Там одна таблица без связей.

Полагаю оптимальный способ реализации следующий, но я что-то упускаю.


select t1.*
from  (dep d, personal p, sal s)  t1

inner join p on d.id = p.dep_id and
inner join s on p.personal_id=s.id and
        s.summa >= s.summa

group by p.fio, d.otdel

having count(*) <=2;
ORDER BY `summa`  DESC
 


Или например так, но то же не работает


select D.Otdel, top 2 temp.sum
from Dep D
inner join (select * from Personal P inner join Sal S on P.Id=S.Personal_id where P.Dep_id=D.Id) temp
Group by D.Otdel
order by D.Otdel
 

Неактивен

 

#2 11.08.2019 21:55:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Вывести по 2 лучших работника из каждого отдела

Дипер написал:

Вывожу запрос следующий. Выдает полный список сотрудников и суммы продаж.


select Otdel , Fio,sum(Summa)
from Sal, Personal, Dep
where Personal.id = Sal.Personal_id and Dep.id=Dep_id
group by Fio, Otdel  
ORDER BY `sum(Summa)`  DESC
 

Ваш запрос возвращает вам результат в виде таблицы, к которой можно применить способы из статьи.
Т.е., просто в лоб, в примерах вместо используемой таблицы пишите `ваш запрос` as `таблица`.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson