问题描述
我想选择最高的交易金额和该金额对应的相册名称。
这是我目前所拥有的:
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
子句,因此您可能需要 LIMIT
或 SELECT 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