【问题标题】:Display the MAX record with JOIN [duplicate]使用 JOIN 显示 MAX 记录 [重复]
【发布时间】:2021-09-26 14:46:43
【问题描述】:

我想选择最高的交易金额和该金额对应的专辑名称。

这是我目前所拥有的:

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,但我不确定如何实现它。

这是我目前得到的:

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)

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server group-by having having-clause


【解决方案1】:

您可以使用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) 或其他内容。

【讨论】:

  • 谢谢!我正要回应并说我得到了这个:“在 FETCH 语句中选项 FIRST 的使用无效。”但是我看到了你的更新。 SELECT TOP 1 正在工作。我正在使用 MS SQL。再次感谢
  • @nathan,对于 MS SQL 问题,您还应该添加 标签。
  • @jarlh 好的,谢谢,这里有新用户
  • @Gordon Linoff 我的后续问题是如果我有两张价格相同的专辑并且它们是最大的怎么办。我希望我的查询同时显示。
  • @nathan SQL Server 支持TOP (1) WITH TIES
【解决方案2】:

这个也可以

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多