使用 JOIN 显示 MAX 记录

问题描述

我想选择最高的交易金额和该金额对应的相册名称

这是我目前所拥有的:

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

我知道我需要一个 HAVING,但我不确定如何实现它。

这是我目前得到的:

专辑名称 最高销售额
卡萨达加 10.00
我走这条线 13.00
甜蜜的复仇 14.00
宽恕之树 12.00

我只想看到 HighestSale (14.00) 然后是专辑名 (Sweet Revenge)

解决方法

您可以使用 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 子句,因此您可能需要 LIMITSELECT TOP (1) 或其他内容。

,

这个也可以

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