簡體   English   中英

有沒有辦法在自聯接表中找到最大值?

[英]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 JOINWHERE找到最大值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM