Expliquer une fonction SQL

Expliquer un extrait de code SQL.

Vous pouvez interroger un modèle directement et tester les résultats renvoyés lors de l'utilisation de différentes valeurs de paramètre en utilisant la console Cloud ou en appelant directement l'API Vertex AI.

Requête forme libre

Expliquez la fonction de CROSS APPLY dans le code ci-dessous :

SELECT customer.CustomerId, customer.CustomerName, ord.*
FROM customers customer
CROSS APPLY
(
    SELECT SUM(order.quantity) as TotalQuantity
    FROM orders order
    WHERE order.CustomerId = customer.CustomerId
) ord;

Réponse

La fonction CROSS APPLY de ce code SQL agit comme une sous-requête corrélée qui applique les résultats de la sous-requête à chaque ligne de la table customers. Ses subdivisions sont les suivantes :

  1. Requête externe : la requête principale sélectionne CustomerId et CustomerName dans la table customers, avec l'alias customer.

  2. CROSS APPLY : ce mot clé introduit la sous-requête corrélée. Il indique à la base de données d'exécuter la sous-requête pour chaque ligne de la table customers.

  3. Sous-requête : la sous-requête calcule la valeur TotalQuantity pour chaque client en effectuant les opérations suivantes :

  4. Sélectionner la somme de quantity dans la table orders, associée à order.

  5. Filtrer la table orders en fonction de la valeur CustomerId de la ligne actuelle de la table customers.

  6. Résultat : CROSS APPLY renvoie une seule ligne pour chaque client, contenant CustomerId, CustomerName et la valeur TotalQuantity calculée.

Concrètement, CROSS APPLY permet de générer une nouvelle colonne de façon dynamique (TotalQuantity) pour chaque client en fonction des résultats de la sous-requête, en joignant ainsi la table customers contenant les données de commande agrégées.

Exemple :

Supposons que vous disposiez des données suivantes :

Clients :

CustomerId CustomerName
1 John Doe
2 Jane Smith

Commandes :

OrderId CustomerId Quantité
1 1 5
2 1 3
3 2 2

La requête renverra le résultat suivant :

CustomerId CustomerName TotalQuantity
1 John Doe 8
2 Jane Smith 2

Remarque :

  • CROSS APPLY est semblable à OUTER APPLY, mais OUTER APPLY renvoie une ligne même si la sous-requête ne renvoie aucun résultat.
  • Dans cet exemple spécifique, vous pouvez obtenir le même résultat en utilisant une clause JOIN avec une clause GROUP BY. Toutefois, CROSS APPLY peut s'avérer plus flexible et efficace dans certains scénarios, en particulier lors du traitement de sous-requêtes complexes.
Modèle : gemini-1.5-flash-001
Température : 1
Nombre maximal de jetons de sortie : 8 192
TopK : 40
TopP : 0,95