Je travaille sur cet exercice sur Codecademy pendant plusieurs jours et ne pouvait toujours pas comprendre la logique derrière it.Below est l'exercice et le code:SQL sous-requêtes en corrélation
Il serait intéressant de commander des vols en leur donnant un numéro de séquence basé sur le temps, par transporteur. Par exemple, en supposant des incréments flight_id à chaque vol supplémentaire, nous pourrions utiliser la requête suivante pour afficher les vols par transporteur, ID de vol et numéro de séquence:
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;
Je peux comprendre que f
est une forme virtuelle de la table flights
, mais que fait f.id < flights.id
? Est-ce que cela signifie que SQL compare chaque ligne f
avec chaque ligne de flights
comme
comparer MQ 17107 avec MQ 7869,
comparer MQ 17107 avec MQ 2205,
comparer MQ 17107 avec MQ 14979
......
comparer MQ 7869 avec MQ 2205,
comparer MQ 7869 wi e MQ 14979
......
A côté, qu'est-ce que COUNT(*)
vraiment compte? Et pourquoi le +1
?
C'est l'image de résultat: query result
Toute aide sera appréciée. Merci.
Comptez le nombre de vols avant l'ID actuel et ajoutez 1. – jarlh
Une bonne méthode de programmation a deux alias de table différents. Par exemple. f1 et f2 ici. – jarlh
Avec [moderne SQL] (http://modern-sql.com/slides), cela peut être fait beaucoup plus facile en utilisant une simple fonction de fenêtre: 'row_number() over (partition support carrier par id)' - pas besoin d'un sous-requête. –