Oggi vediamo il seguente esercizio di LeetCode a tema SQL:
Write an SQL query to find for each month and country, the number of transactions and their total amount, the number of approved transactions and their total amount.
Return the result table in any order.
Guardando le tabelle fornite dall’esercizio si può notare che la tabella Transactions contiene le informazioni sulle transazioni: id, country, state (approved/void), amount, trans_date.
L’obiettivo è raggruppare le transazioni per mese (anno-mese) e paese, e calcolare:
- Il numero totale di transazioni (
trans_count) - Il numero di transazioni approvate (
approved_count) - L’importo totale delle transazioni (
trans_total_amount) - L’importo totale delle transazioni approvate (
approved_total_amount)
Detto ciò, la soluzione che proponiamo noi è la seguente:
SELECT
SUBSTRING(trans_date, 1, 7) AS month,
country,
COUNT(*) AS trans_count,
SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(CASE WHEN state = 'approved' THEN amount ELSE 0 END) AS approved_total_amount
FROM Transactions
GROUP BY month, countryIn questa query:
SUBSTRING(trans_date, 1, 7)estrae l’anno e il mese dalla data (formato YYYY-MM)COUNT(*)conta tutte le transazioni per ogni gruppoSUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END)conta le transazioni approvateSUM(amount)somma l’importo di tutte le transazioniSUM(CASE WHEN state = 'approved' THEN amount ELSE 0 END)somma solo gli importi delle transazioni approvateGROUP BY month, countryraggruppa per mese e paese
Questo esercizio richiede l’uso di aggregazioni condizionali con CASE.
Se hai dubbi in merito non esitare a contattarci sui nostri social, saremo più che felici di risponderti :)