Не могу в PostgreSQL создать запрос, содержащий сведения о сотрудниках, имеющих максимальный объём продаж

Всем привет! Делаю задания по базам данных PostgreSQL 16, которые нам дали (срок до 26 мая 23:59 по МСК). Последнее задание делаю, и тут столкнулся с некоторыми трудностями. Пытаюсь для максимального объёма продаж умножить количество покупателей на стоимость одной квартиры (не знаю, так я делаю или нет, сомневаюсь).

b) Создать запрос, содержащий сведения о сотрудниках, которые имеют максимальный объем продаж: ID_сотрудника, должность (если есть), ФИО, Сумма продаж. Сортировка записей – по сумме продаж.

Мой код запроса про сведения о сотрудниках:

SELECT cod_prodavtsa AS ID_Сотрудника, fio_prodavtsa AS ФИО, dolzhnost AS Должность, 
COUNT(id_klient) * stoimost AS Сумма_продаж
FROM dannyie_o_prodavtse 
JOIN objekt_nedvizhimosti ON dannyie_o_prodavtse.id_prodavtsa =
objekt_nedvizhimosti.cod_prodavtsa, kharakteristika_objekta_nedvizhimosti;

После запуска выводится такая ошибка:

ERROR:  столбец "objekt_nedvizhimosti.cod_prodavtsa" должен фигурировать в предложении             
GROUP BY или использоваться в агрегатной функции
LINE 1: SELECT cod_prodavtsa AS ID_Сотрудника, fio_prodavtsa AS ФИО,...
           ^ 

ОШИБКА:  столбец "objekt_nedvizhimosti.cod_prodavtsa" должен фигурировать в предложении           
GROUP BY или использоваться в агрегатной функции
SQL state: 42803
Character: 8

Что я не так делаю? Скидываю все таблицы, которые я смог сделать.

Текст последнего задания

Используя конструкции языка SQL, создайте запросы на выборку к БД, созданной согласно вашему варианту:

a) Создать запрос, содержащий ФИО клиента, его ID и номер заказа. Сортировка записей – по фамилии клиента, а для одинаковых фамилий – по именам и отчествам (если и имена будут совпадать).

SELECT fio_pokupatelya AS ФИО_клиента, id_klient AS ID_Клиента, cod_objekta AS Номер_заказа
FROM dannyie_pokupatelya LEFT JOIN objekt_nedvizhimosti
ON dannyie_pokupatelya.id_pokupatelya = objekt_nedvizhimosti.id_klient 
ORDER BY ФИО_клиента;

введите сюда описание изображения

b) Создать запрос, содержащий сведения о сотрудниках, которые имеют максимальный объем продаж: ID_сотрудника, должность (если есть), ФИО, Сумма продаж. Сортировка записей – по сумме продаж.

Именно в пункте b) возникли трудности.

c) Создать запрос для отбора сведений о сотрудниках, возраст которых меньше заданного. Поля запроса: Фамилия, Имя, Отчество, Должность (если есть), Оклад (если есть), Возраст (данное поле является вычисляемым). Сортировка записей – по возрасту.

SELECT fio_prodavtsa AS ФИО_сотрудника, dolzhnost AS Должность, oklad AS Оклад,
EXTRACT(YEAR FROM TIMESTAMP 'NOW()') - EXTRACT(YEAR FROM data_rozhdenia) AS Возраст
FROM dannyie_o_prodavtse
ORDER BY Возраст;

введите сюда описание изображения

d) Создать итоговый запрос, вычисляющий количество сотрудников в каждом отделе (если отделов нет, то создать). Группировка – по полю Название отдела. Для подсчета количества сотрудников использовать функцию Count (например, в поле Фамилия).

SELECT otdelenie AS Название_отдела, COUNT(fio_prodavtsa)
FROM dannyie_o_prodavtse
GROUP BY Название_отдела;

введите сюда описание изображения

Таблицы, где я делал запросы:

Данные покупателя

введите сюда описание изображения

Объект недвижимости

введите сюда описание изображения

Данные о продавце

введите сюда описание изображения

Характеристика объекта недвижимости

введите сюда описание изображения


Ответы (1 шт):

Автор решения: CrazyElf

Создать запрос, содержащий сведения о сотрудниках, которые имеют максимальный объем продаж. [...] Сортировка записей – по сумме продаж

Вот у вас даже русским языком написано про сумму. Нужно сгруппировать по id сотрудника и суммировать стоимости внутри этой группы. Всё.

SELECT SUM(stoimost) ...
...
GROUP BY id_sotrudnika
ORDER BY SUM(stoimost) DESC

Умножать ничего не нужно. Вот представьте, сотрудником были проданы 3 отдельных яблока ценой 1р, 2р, 3р. Что тут умножать и зачем? Просто суммируете по каждому сотруднику продажи (за счёт группировки), и всё.

P.S. Чтобы не повторяться, в ORDER BY можно указать алиас поля, либо порядковый номер поля в SELECT. Но можно и SUM продублировать, с точки зрения оптимизации запроса разницы вроде не будет.

→ Ссылка