Отобразите запись MAX с помощью JOIN

Я хочу выбрать самую высокую сумму транзакции и соответствующее название альбома для этой суммы.

Вот что у меня есть на данный момент:

SELECT a.AlbumName, MAX(t.TransAmt) AS HighestSale
FROM TRANSACTIONS t 
JOIN COLLECTIONS c ON c.CollectionID = t.CollectionID
JOIN ALBUMS a ON a.AlbumID = c.AlbumID
GROUP BY a.AlbumName

Я знаю, что мне нужен ХЕЙВИНГ, но я не уверен, как его реализовать.

Вот что я получаю сейчас:

AlbumName HighestSale
Cassadaga 10.00
I Walk The Line 13.00
Sweet Revenge 14.00
The Tree of Forgiveness 12.00

Я хочу увидеть только HighestSale (14.00), а затем AlbumName (Sweet Revenge).


person nathan    schedule 18.07.2021    source источник
comment
Отметьте свой вопрос с помощью базы данных, которую вы используете.   -  person Gordon Linoff    schedule 18.07.2021


Ответы (2)


Вы можете сделать это с помощью ORDER BY и получить одну строку. В стандартном SQL

SELECT a.AlbumName, t.TransAmt AS HighestSale
FROM TRANSACTIONS t JOIN
     COLLECTIONS c
     ON c.CollectionID = t.CollectionID JOIN
     ALBUMS a
     ON a.AlbumID = c.AlbumID
ORDER BY t.TransAmt DESC
OFFSET 0 ROW FETCH FIRST 1 ROW ONLY;

Некоторые базы данных не поддерживают стандартное предложение FETCH, поэтому вам может понадобиться LIMIT или SELECT TOP (1) или что-то еще.

person Gordon Linoff    schedule 18.07.2021
comment
Спасибо! Я как раз собирался ответить и сказать, что получил следующее: недопустимое использование опции FIRST в операторе FETCH. Но я видел ваше обновление. SELECT TOP 1 работает. Я использую MS SQL. Спасибо еще раз - person nathan; 18.07.2021
comment
@nathan, для вопросов по MS SQL вам также следует добавить тег ‹sql-server›. - person jarlh; 18.07.2021
comment
@jarlh ой хорошо, спасибо, здесь новый пользователь - person nathan; 18.07.2021
comment
@Gordon Linoff, мой следующий вопрос: а что, если у меня есть два альбома с одинаковой ценой, и они максимальные. Я бы хотел, чтобы в моем запросе отображалось и то, и другое. - person nathan; 18.07.2021
comment
@nathan SQL Server поддерживает TOP (1) WITH TIES - person Charlieface; 18.07.2021

Это также может работать

SELECT a.AlbumName, MAX(t.TransAmt) AS 
HighestSale
FROM TRANSACTIONS t 
JOIN COLLECTIONS c ON c.CollectionID = 
t.CollectionID
JOIN ALBUMS a ON a.AlbumID = c.AlbumID
WHERE t.TransAmt = (SELECT MAX(TransAmt) 
FROM TRANSACTIONS) 
GROUP BY a.AlbumName
person kelly43    schedule 18.07.2021