Ordinare e formattare i dati sono skill fondamentali che ti permettono di preparare report leggibili, ottimizzare l’analisi dei dati e migliorare l’esperienza utente. Queste conoscenze ti serviranno quando crei report analitici, prepari dati per l’export e anche nel lavoro quotidiano con i database. Nella pratica ti capiterà spesso di dover formattare bene i dati, togliere i duplicati e ordinare le info per renderle più chiare. Proprio di questo ci occupiamo oggi!
Esempio 1: Creare una lista di clienti unici unendo nome e cognome, ordinata per cognome
Abbiamo una tabella customers dove sono salvati i dati dei clienti:
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
Il nostro obiettivo:
- Unire
first_nameelast_namein una sola colonnafull_name. - Estrarre solo i clienti unici.
- Ordinare la lista per cognome (
last_name).
Query SQL
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
Nota che i record duplicati Alex Lin sono stati eliminati grazie a DISTINCT, e la lista completa è stata ordinata per cognome in ordine alfabetico.
Esempio 2: Formattare i dati degli ordini e ordinarli
Nella tabella orders ci sono i dati degli ordini:
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
Il nostro obiettivo:
- Creare una colonna
formatted_order_datedove la data dell’ordine sia nel formato DD-MM-YYYY. - Eliminare i record duplicati di cliente e data (tenere solo le combinazioni uniche di
customer_nameeorder_date). - Ordinare gli ordini per data in ordine decrescente.
- Query SQL
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
Risultato:
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
Guarda come con la funzione TO_CHAR() abbiamo cambiato il formato della data in DD-MM-YYYY, e grazie a DISTINCT abbiamo tolto i duplicati.
Esempio 3: Estrarre combinazioni uniche "nome + cognome" degli studenti e ordinare per cognome e data di nascita
Nella tabella students ci sono i dati degli studenti:
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
Il nostro obiettivo:
- Unire nome e cognome in una colonna
full_name. - Estrarre combinazioni uniche "nome + cognome".
- Ordinare gli studenti per cognome e poi per data di nascita.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
Risultato:
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
Attenzione: due record uguali dello studente "Alex Lin" sono stati uniti in una sola riga, e l’ordinamento è stato fatto prima per cognome, poi per data di nascita.
Esercizio pratico
Applica quello che hai imparato oggi per risolvere questo esercizio:
Compito: Hai una tabella products che contiene questi dati:
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | Elettronika | Telefon | 50000 |
| 2 | Odezhda | Kurtka | 8000 |
| 3 | Elettronika | Noutbuk | 70000 |
| 4 | Odezhda | Kurtka | 8000 |
- Crea una colonna
formatted_productdoveproduct_nameè unito alla categoria con un trattino, tipo:Telefon - Elettronika. - Elimina le combinazioni duplicate di
product_nameecategory. - Ordina i prodotti per categoria e poi per prezzo (dal più economico al più caro).
Qui sotto trovi la struttura della query per risolvere l’esercizio:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Prova a immaginare da solo il risultato di questa query!
Usare le funzioni CONCAT(), DISTINCT e ORDER BY ti permette di ottenere dati super leggibili e ben strutturati, cosa fondamentale nei progetti e nei task reali. Assicurati di capire bene come combinarle, facendo pratica con gli esempi!
GO TO FULL VERSION