Spiegare una funzione SQL

Spiegare uno snippet di codice SQL.

Puoi eseguire query direttamente su un modello e testare i risultati restituiti quando utilizzi valori parametro diversi con la console Cloud o chiamando direttamente l'API Vertex AI.

Prompt in formato libero

Spiega la funzione di CROSS APPLY nel codice seguente:

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;

Risposta

La funzione CROSS APPLY in questo codice SQL funge da sottoquery correlata che applica i risultati della sottoquery a ogni riga della tabella customers. Ecco un'analisi dettagliata:

  1. Query esterna:la query principale seleziona CustomerId e CustomerName dalla tabella customers, con alias customer.

  2. CROSS APPLY: questa parola chiave introduce la sottoquery correlata. Indica al database di eseguire la sottoquery per ogni riga della tabella customers.

  3. Sottoquery: la sottoquery calcola il TotalQuantity per ogni cliente in base a:

  4. Selezione della somma di quantity dalla tabella orders, con alias di order.

  5. Filtro della tabella orders in base al valore CustomerId della riga corrente nella tabella customers.

  6. Risultato: CROSS APPLY restituisce una singola riga per ogni cliente, contenente CustomerId, CustomerName e il valore TotalQuantity calcolato.

In sostanza, CROSS APPLY consente di generare dinamicamente una nuova colonna (TotalQuantity) per ogni cliente in base ai risultati della sottoquery, unendo efficacemente la tabella customers con i dati degli ordini aggregati.

Esempio:

Supponiamo che tu abbia i seguenti dati:

Clienti:

CustomerId CustomerName
1 Mario Rossi
2 Sara Bianchi

Ordini:

OrderId CustomerId Quantità
1 1 5
2 1 3
3 2 2

La query restituirà il seguente risultato:

CustomerId CustomerName TotalQuantity
1 Mario Rossi 8
2 Sara Bianchi 2

Nota:

  • CROSS APPLY è simile a OUTER APPLY, ma OUTER APPLY restituisce una riga anche se la sottoquery non restituisce alcun risultato.
  • In questo esempio specifico, potresti ottenere lo stesso risultato utilizzando JOIN con una clausola GROUP BY. Tuttavia, CROSS APPLY può essere più flessibile ed efficiente in determinati scenari, soprattutto quando ha a che fare con sottoquery complesse.
Modello: gemini-1.5-flash-001
Temperatura: 1
Numero massimo di token di output: 8192
TopK: 40
TopP: 0,95