[英]Is there a way to find the max value in a table of a self-join?
SELECT *
FROM Trips T1
WHERE T1.Cost NOT IN (SELECT T2.Cost FROM Trips T1, Trips T2 WHERE T1.Cost > T2.Cost)
這是目前我的查詢,它將返回行程中列出的最昂貴的旅行。 當然,您可以簡單地使用 MAX,但我被指示不要這樣做。
這是我想出的返回我想要的查詢。 在 Trips 表中,它包含 TripId、StateofTrip(即 MA、NC、PA)、TravelMethod(汽車、火車、公共汽車)和成本。 所以 output 可能看起來像
987 CA Plane 2000
我想知道是否有辦法在自聯接中執行此操作,而不是嵌套子查詢。 所以事情是這樣開始的......
SELECT *
FROM Trips T1, Trips T2
....
如果不顯式使用 MAX 可以做到這一點嗎? 如何比較自聯接中的值並返回奇異最大值?
此外,在第一個查詢中,有人可以解釋嵌套示例嗎? 我真的不明白 NOT in 如何返回所需的結果。
切勿在FROM
子句中使用逗號。 始終使用正確、明確、標准、可讀的JOIN
語法。
您可以使用LEFT JOIN
和WHERE
找到最大值:
SELECT T1.*
FROM Trips T1 LEFT JOIN
Trips T2
ON T2.Cost > T1.Cost
WHERE t2.Cost IS NULL;
也就是說,我認為這是尋找最大值的荒謬方法。 有很多更好的方法,包括:
SELECT T.*
FROM Trips T
ORDER BY T.COST DESC
LIMIT 1;
將返回最昂貴行程的查詢
“最昂貴的旅行”是價格/成本最高的旅行 - 即有可能不止一次旅行可能同時是最昂貴的。 所以
SELECT *
FROM Trips T1
WHERE NOT EXISTS ( SELECT NULL
FROM Trips T2
WHERE T2.Cost > T1.Cost )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.