CodeGym /Corsi /SQL SELF /Errori tipici nella sorting e formattazione dei dati

Errori tipici nella sorting e formattazione dei dati

SQL SELF
Livello 6 , Lezione 4
Disponibile

Sorting e formattazione — sono cose logiche e utili. Ma a volte ci si può confondere e ottenere risultati inaspettati. Dai, vediamo insieme gli errori più frequenti così i tuoi dati saranno sempre perfetti e nell’ordine giusto!

1. Sorting di dati di tipi diversi

Immagina questa situazione: stai facendo la sorting di una tabella su una colonna che contiene sia numeri che stringhe. PostgreSQL ovviamente ci prova ad aiutarti, ma il risultato può sorprenderti. Per esempio hai una tabella dove value è testo:

id value
1 10
2 2
3 apple
4 20

E scrivi la query:

SELECT *
FROM mixed_data 
ORDER BY value;

Risultato atteso? Magari: 2, 10, 20, apple? Nope, PostgreSQL fa la sorting delle stringhe in base all’ordine lessicografico/alfabetico, quindi il risultato sarà: 10, 2, 20, apple.

Come evitare l’errore?

Se sai che la tua colonna testo contiene numeri, converti esplicitamente in numero prima della sorting:

SELECT * FROM mixed_data ORDER BY value::INT;

Ora il risultato sarà: 2, 10, 20.

Ma occhio: se nella colonna ci sono stringhe che non si possono convertire in numeri, la query ti darà errore!

2. Specificare più colonne per la sorting

Uno degli errori classici — dimenticare la priorità quando fai la sorting su più colonne. Tipo, vuoi ordinare gli studenti per cognome e poi per età, ma sbagli l’ordine:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

La tua query:

-- Sorting sbagliata
SELECT * 
FROM students 
ORDER BY age, last_name;

Risultato:

id last_name age
1 Lin 18
3 Song 19
2 Lin 20

Qui PostgreSQL ordina prima per età, poi per cognome. Non proprio quello che volevi, vero?

Query giusta:

SELECT *
FROM students 
ORDER BY last_name, age;

Risultato:

id last_name age
1 Lin 18
2 Lin 20
3 Song 19

Ora la sorting è prima per cognome, poi per età all’interno dello stesso cognome. Proprio come volevi!

3. Sorting con direzioni diverse

A volte serve fare la sorting su più colonne con direzioni diverse. Tipo, ordinare i prodotti per categoria (crescente), e dentro ogni categoria per prezzo (decrescente). L’errore è dimenticare di specificare la direzione sulla seconda colonna:

id category price
1 Electronics 99.99
2 Electronics 199.99
3 Furniture 299.99
4 Furniture 199.99

La tua query:

-- Sorting sbagliata
SELECT * 
FROM products 
ORDER BY category, price;

Risultato: i prezzi dentro le categorie sono ordinati in modo crescente, ma magari volevi il contrario.

Query giusta:

SELECT *
FROM products 
ORDER BY category ASC, price DESC;

Errori nella formattazione

4. Uso sbagliato di CONCAT()

Metti che vuoi unire nome e cognome in una stringa, ma di fretta ti dimentichi lo spazio tra i due:

id first_name last_name
1 John Doe
2 Jane Smith

La tua query:

SELECT
    CONCAT(first_name, last_name) AS full_name 
FROM employees;

Risultato:

full_name
JohnDoe
JaneSmith

Come sistemare?

Aggiungi uno spazio tra nome e cognome:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Ora tutto sarà molto più bello:

full_name
John Doe
Jane Smith

5. Errori con CAST()

Metti che vuoi convertire una data in stringa per mostrarla meglio, ma ti dimentichi di specificare il formato:

id event_date
1 2023-01-15

La tua query:

-- Conversione sbagliata
SELECT 
    CAST(event_date AS TEXT) 
FROM events;

Risultato: la data viene convertita in formato YYYY-MM-DD, che non sempre è comodo per chi legge.

Come sistemare?

Usa la funzione TO_CHAR() per specificare il formato:

SELECT
    TO_CHAR(event_date, 'DD-MM-YYYY') AS formatted_date 
FROM events;

Ora la data sarà visualizzata come 15-01-2023.

6. Errori con DISTINCT

DISTINCT — è una bomba per tirare fuori valori unici, ma a volte lo si usa male. Tipo, vuoi la lista dei nomi unici dei dipendenti:

SELECT DISTINCT first_name, last_name
FROM employees;

A prima vista sembra ok, ma se due dipendenti hanno lo stesso nome e cognome, verranno mostrati come un solo risultato, anche se sono persone diverse.

Esempio dati:

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Risultato della query:

first_name last_name
Alex Lin
Maria Chi

Come evitare l’errore?

Aggiungi la chiave primaria per garantire l’unicità:

SELECT DISTINCT ON (id) first_name, last_name
FROM employees;

Risultato della query con DISTINCT ON (id):

id first_name last_name
1 Alex Lin
2 Maria Chi
3 Alex Lin

Come evitare errori?

Lavorare con i dati richiede attenzione ai dettagli. Per evitare gli errori di cui sopra:

Controlla i tipi di dati: assicurati che le funzioni che usi supportino i tipi delle tue colonne.

Controlla l’ordine di sorting: assicurati che le colonne siano nell’ordine giusto. Non dimenticare le direzioni di sorting ASC, DESC.

Testa le query su piccoli set di dati: così puoi beccare gli errori subito.

Non dimenticare la documentazione di PostgreSQL: ti aiuta a risolvere i dubbi sulle funzioni e su come usarle. Ecco il link: doc ufficiale PostgreSQL.

Ora sei pronto a risolvere qualsiasi mistero di formattazione e sorting! Andiamo avanti.

1
Sondaggio/quiz
Estrazione di valori unici, livello 6, lezione 4
Non disponibile
Estrazione di valori unici
Estrazione di valori unici
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION