Я использую PostgreSQL БД и имеют две таблицы, какSQL получить идентификатор максимального счета за официанта
официантов (идентификатор, имя)
векселями (идентификатор , сумма, id_waiter)
, и я ищу идентификатор счета с максимальной суммой на одного официанта.
я нашел следующее решение
SELECT waiter.id AS waiter, maxamount, bills.id AS bill
FROM waiter
JOIN (
SELECT id_waiter, max(amount) AS maxamount
FROM bills
GROUP BY id_waiter) AS maxis ON maxis.id_waiter = waiter.id
JOIN bills ON maxis.maxamount = bills.amount AND waiter.id = bills.id_kellner
Это работает, но это кажется немного излишним, и мне интересно, если есть лучший способ сделать это. То, что мне не нравится в этом, состоит в том, что счета соединяются дважды, один раз в подзапросе и один раз в конце.
Вот некоторые выборочные данные
Примеры данных
официантов стол
id | name
1 | john
2 | joe
счета стол
id | amount | id_waiter
1 | 20 | 1
2 | 25 | 2
3 | 50 | 2
4 | 20 | 1
5 | 60 | 1
6 | 10 | 2
Результат выглядит следующим образом
waiter | maxamount | bill
1 | 60 | 5
2 | 50 | 3
Выборочные данные было бы неплохо. .. –
Пример данных добавлен –