2017-08-03 100 views
1

通過codeacademy學習SQL。這個例子是一張航班表;
例如,假設flight_id增量每增加一個航班,我們可以使用下面的查詢來查看由航空公司航班號航班,以及序列號:相關子查詢 - Codeacademy

SELECT carrier, id, 
    (SELECT COUNT(*) 
    FROM flights f 
    WHERE f.id < flights.id 
     AND f.carrier = flights.carrier) + 1 AS flight_sequence_number 
FROM flights; 

我不理解的「F」的功能航班之後。另外f.carrier = flights.carrier是什麼意思? 如果有人可以擺脫一些很棒的光芒!

+0

這不是函數。它是這個表名的別名 –

+0

爲航班提供不同的表別名使事情變得更清晰。 (例如f1和f2) – jarlh

+0

使用窗口函數可以更高效地完成此操作。 –

回答

0

給你的表別名,因爲隨着查詢的增長你會失去蹤跡。

SELECT f.carrier, f.id, (SELECT COUNT(*) 
         FROM flights fs 
         WHERE fs.id < f.id 
         AND fs.carrier = f.carrier) + 1 AS flight_sequence_number 
FROM flights f; 
0

f是表別名,用於區分在所述內和外查詢flights的參考文獻。我通常會使用f外部查詢和f2爲內部查詢:

SELECT f.carrier, f.id, 
     (SELECT COUNT(*) + 1 
     FROM flights f2 
     WHERE f2.id < f.id AND f2.carrier = f.carrier 
     ) AS flight_sequence_number 
FROM flights f; 

作爲一個說明,這是這樣計算的荒謬和老式的方法。 ANSI SQL支持一個簡單的函數來執行此操作:

SELECT f.carrier, f.id, 
     ROW_NUMBER() OVER (PARTITION BY f.carrier ORDER BY f.id) as flight_sequence_number 
FROM flights f;