Oggi vediamo il seguente esercizio di LeetCode a tema SQL:
Write a solution to find the IDs of the users who visited without making any transactions and the number of times they made these types of visits.
Return the result table in any order.
Guardando le tabelle fornite dall’esercizio si può notare che ci sono due tabelle: Visits (con visit_id, customer_id, visit_date) e Transactions (con transaction_id, visit_id, amount).
L’obiettivo è trovare i clienti che hanno visitato il negozio ma non hanno effettuato alcuna transazione e quante volte lo hanno fatto. Per farlo, dobbiamo collegare le due tabelle e identificare le visite senza transazioni associate.
Detto ciò, la soluzione che proponiamo noi è la seguente:
SELECT v.customer_id, COUNT(v.visit_id) AS count_no_trans
FROM Visits v
LEFT JOIN Transactions t
ON v.visit_id = t.visit_id
WHERE t.amount IS NULL
GROUP BY v.customer_idIn questa query:
- Usiamo una
LEFT JOINtra Visits e Transactions per mantenere tutte le visite, anche quelle senza transazioni - La condizione
ON v.visit_id = t.visit_idcollega le visite alle relative transazioni - La clausola
WHERE t.amount IS NULLfiltra solo le visite che non hanno una transazione associata (l’amount sarà NULL per le visite senza transazione) GROUP BY v.customer_idraggruppa i risultati per clienteCOUNT(v.visit_id)conta il numero di visite senza transazione per ogni cliente
Questo esercizio combina LEFT JOIN con WHERE su colonne NULL per identificare i record senza corrispondenza.
Se hai dubbi in merito non esitare a contattarci sui nostri social, saremo più che felici di risponderti :)