相关子查询 - Codeacademy
问题描述:
通过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是什么意思? 如果有人可以摆脱一些很棒的光芒!
答
给你的表别名,因为随着查询的增长你会失去踪迹。
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;
答
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;
这不是函数。它是这个表名的别名 –
为航班提供不同的表别名使事情变得更清晰。 (例如f1和f2) – jarlh
使用窗口函数可以更高效地完成此操作。 –