И так имеем таблицы две, первая - отделы, вторая - сотрудники и руководители
Для теста
CREATE TABLE `department` (
`id` int(11) NOT NULL,
`name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `department` (`id`, `name`) VALUES
(1, 'Разнорабочие'),
(2, 'Менеджеры'),
(3, 'Бухгалтерия'),
(4, 'Руководители'),
(5, 'Техподдержка'),
(6, 'Кадры');
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`departmentId` int(11) NOT NULL,
`chiefId` int(11) DEFAULT NULL,
`name` varchar(200) NOT NULL,
`salary` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `employee` (`id`, `departmentId`, `chiefId`, `name`, `salary`) VALUES
(1, 5, 24, 'Работник 1', 37820),
(2, 5, NULL, 'Работник 2', 14548),
(3, 4, 32, 'Работник 3', 31035),
(4, 2, NULL, 'Работник 4', 63726),
(5, 4, NULL, 'Работник 5', 46477),
(6, 1, NULL, 'Работник 6', 54531),
(7, 2, NULL, 'Работник 7', 12797),
(8, 5, NULL, 'Работник 8', 57358),
(9, 2, NULL, 'Работник 9', 19638),
(10, 2, NULL, 'Работник 10', 21897),
(11, 4, NULL, 'Работник 11', 54294),
(12, 3, NULL, 'Работник 12', 19519),
(13, 4, NULL, 'Работник 13', 47218),
(14, 1, NULL, 'Работник 14', 46473),
(15, 5, NULL, 'Работник 15', 63014),
(16, 6, NULL, 'Работник 16', 34016),
(17, 2, NULL, 'Работник 17', 34183),
(18, 4, NULL, 'Работник 18', 18331),
(19, 5, NULL, 'Работник 19', 65649),
(20, 4, NULL, 'Работник 20', 57348),
(21, 5, NULL, 'Работник 21', 33770),
(22, 5, NULL, 'Работник 22', 10497),
(23, 5, NULL, 'Работник 23', 60513),
(24, 4, NULL, 'Работник 24', 30280),
(25, 2, NULL, 'Работник 25', 55692),
(26, 2, NULL, 'Работник 26', 40635),
(27, 2, NULL, 'Работник 27', 15839),
(28, 3, NULL, 'Работник 28', 30223),
(29, 5, NULL, 'Работник 29', 36690),
(30, 2, NULL, 'Работник 30', 30108),
(31, 3, NULL, 'Работник 31', 56839),
(32, 4, NULL, 'Работник 32', 63970),
(33, 3, NULL, 'Работник 33', 28888),
(34, 4, NULL, 'Работник 34', 68130),
(35, 5, NULL, 'Работник 35', 9486),
(36, 1, NULL, 'Работник 36', 12065),
(37, 3, NULL, 'Работник 37', 28868),
(38, 5, NULL, 'Работник 38', 44911),
(39, 4, NULL, 'Работник 39', 58499),
(40, 5, NULL, 'Работник 40', 32285),
(41, 5, NULL, 'Работник 41', 41919),
(42, 3, NULL, 'Работник 42', 40896),
(43, 3, NULL, 'Работник 43', 74759),
(44, 1, NULL, 'Работник 44', 27362),
(45, 3, NULL, 'Работник 45', 12043),
(46, 2, NULL, 'Работник 46', 7567),
(47, 3, NULL, 'Работник 47', 60379),
(48, 5, NULL, 'Работник 48', 54106),
(49, 1, NULL, 'Работник 49', 19598),
(50, 5, NULL, 'Работник 50', 50405);
В поле chiefId стоит id руководителя
Задачи
1. Вывести список сотрудников в формате: Сотрудник, Отдел сотрудника, Руководитель, Отдел руководителя.
2. Вывести список сотрудников, получающих заработную плату, большую чем у непосредственного руководителя
3. Вывести список сотрудников, получающих максимальную заработную плату в своем отделе
4. Вывести список ID отделов, количество сотрудников в которых не превышает 3 человек
5. Вывести список сотрудников, не имеющих назначенного руководителя, работающего в том же отделе
6. Вывести список наименований отделов с максимальной суммарной зарплатой сотрудников
7. Вывести ФИО сотрудника(ов), получающего третью по величине зарплату в организации
Задача 1
$stmt = $pdo->prepare('SELECT s.name as sot, r.name as rabt,
ds.id as sdepid, ds.name as sdepname,
dr.id as rdepid, dr.name as rdepname
FROM employee s
LEFT JOIN employee r ON s.chiefId = r.id
LEFT JOIN department ds ON s.departmentId = ds.id
LEFT JOIN department dr ON r.departmentId = dr.id
ORDER BY s.id
');
$stmt->execute();
$res = $stmt->fetchAll();
echo '<pre>'; print_r($res); echo '</pre>';