【发布时间】:2019-10-23 20:32:56
【问题描述】:
需要显示旅行次数最多的船的名称,所以我做了一个计算旅行次数的查询:
SELECT B.IdBoat, COUNT(T.IdTrip)
FROM Trip T INNER JOIN Boat B ON T.IdBoat=B.IdBoat
GROUP BY B.IdBoat
现在我需要显示具有 MAX 行程的人的名称,我如何将该查询用作子查询,而不使用 ORDER BY DESC 和 TOP 1 但使用 MAX? 目前得到:
SELECT B.Name
FROM Trip T INNER JOIN Boat B ON T.IdBoat=B.IdBoat
WHERE B.IdBoat = MAX( the sub query above)
也试过了
SELECT B.Name, T.IdTrip
FROM Boat B INNER JOIN Trip T ON B.IdBoat=T.IdBoat
WHERE B.IdBoat IN (
SELECT MAX(T.NTrips) FROM
(SELECT B.IdBoat AS [IdBoat], COUNT(T.IdTrip) AS [NTrips]
FROM Trip T INNER JOIN Boat B ON B.IdBoat=T.IdBoat
GROUP BY B.Boat) T
GROUP BY T.IdBoat)
上面返回的是船名上的完整计数 3,而不是正确的 2。
我已经尝试在 stackoverflow 和其他人上搜索和搜索上述问题,但无法根据我的查询调整他们的解决方案,任何帮助都是很好的帮助。
谢谢。
编辑 1. 如要求,我将提供一些数据以帮助更好地理解问题
桌船:
IdBoat | Name
1 | 'SS Sparrow'
2 | 'SS AndaNoMar'
餐桌旅行
IdTrip | IdBoat
1 | 1
2 | 1
3 | 2
子查询 1 (COUNT)
IdBoat | NTrips
2 | 1
1 | 2
【问题讨论】:
-
拥有一些具有预期输出的样本数据总是一个好主意。这样更容易理解。
-
了解,尝试添加示例数据以帮助更好地理解问题,但不知道如何更好地设置样式,对不起。
-
为什么不直接使用
TOP 1和ORDER BY COUNT(T.IdTrip) DESC?
标签: sql sql-server