Divisione tra interi e decimali
Eviti risultati sorprendenti usando il casting
Divisione tra interi e decimali è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Un risultato sorprendente
Iniziamo con un enigma. Che cosa pensa che restituisca la query seguente?
Se si aspetta 0.5, potrebbe rimanere sorpreso. In molti database SQL, dividere due interi produce un risultato intero: la parte decimale viene eliminata completamente.
SELECT 1 / 2 AS result;Spiegazione della divisione intera
Quando entrambi gli operandi di una divisione sono interi, SQL esegue una divisione intera. Il risultato viene troncato verso zero: nessun arrotondamento, solo la parte intera.
Pertanto 1 / 2 = 0, 7 / 3 = 2 e 9 / 4 = 2. La parte frazionaria viene scartata senza alcuna indicazione.
SELECT 7 / 3 AS truncated_result;Altri esempi di divisione intera
Ecco diversi esempi di divisione intera in un'unica query. Noti come tutti i risultati perdano la parte decimale. Questo comportamento è coerente in tutte le espressioni che coinvolgono solo valori letterali interi o colonne di tipo intero.
SELECT
10 / 4 AS ten_div_four,
9 / 2 AS nine_div_two,
1 / 3 AS one_div_three,
6 / 6 AS six_div_six;Risolvere il problema con CAST
Il modo più affidabile per forzare la divisione decimale consiste nell'effettuare un cast di almeno un operando a un tipo decimale. CAST(value AS DECIMAL) o CAST(value AS NUMERIC) indicano a SQL di trattare il numero come un valore a virgola mobile, così la divisione restituisce un risultato preciso.
SELECT CAST(1 AS DECIMAL) / 2 AS result;Eseguire il CAST su entrambi i lati
È sufficiente effettuare il cast di un solo lato della divisione per ottenere un risultato decimale: SQL promuoverà automaticamente l'altro operando. Tuttavia, effettuare il cast di entrambi i lati rende esplicita l'intenzione ed evita confusione quando si leggerà il codice in seguito.
SELECT
CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
CAST(7 AS DECIMAL) / 3 AS one_cast;Usare un valore letterale decimale
Un altro rapido espediente consiste nello scrivere uno degli operandi come valore letterale decimale aggiungendo .0. SQL interpreta 1.0 come un numero decimale, forzando l'aritmetica decimale nell'intera espressione.
È utile per query rapide e ad hoc, anche se CAST è più chiaro nel codice di produzione.
SELECT 1.0 / 2 AS decimal_result,
7.0 / 3 AS another_result;Problema reale: i dati delle colonne
Il problema si manifesta davvero quando si lavora con colonne intere. Immagini una tabella che registra gli obiettivi di vendita. Dividere colonne intere produce risultati interi: un tasso di conversione pari a 0 quando dovrebbe essere 0.75!
CREATE TABLE sales_targets (
rep TEXT,
achieved INT,
target INT
);
INSERT INTO sales_targets VALUES
('Alice', 75, 100),
('Bob', 3, 4),
('Carol', 9, 10);
SELECT rep,
achieved / target AS wrong_rate
FROM sales_targets;Correzione della divisione tra colonne
Applichi CAST alla colonna del numeratore e la divisione restituirà ora il vero tasso di conversione come valore decimale. Il denominatore viene convertito automaticamente.
Moltiplicando successivamente per 100.0 si ottiene una percentuale, continuando a usare l’aritmetica decimale.
SELECT rep,
CAST(achieved AS DECIMAL) / target AS conversion_rate,
CAST(achieved AS DECIMAL) / target * 100.0 AS pct
FROM sales_targets;Controllo della precisione decimale
È possibile controllare quante cifre decimali vengono memorizzate specificando precisione e scala nel cast: DECIMAL(10, 2) significa fino a 10 cifre complessive, di cui 2 dopo il separatore decimale. È utile quando si desidera un risultato ordinato e arrotondato invece di molte cifre finali.
SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;ROUND dopo la divisione
A volte si desidera eseguire i calcoli internamente con la massima precisione e poi arrotondare il valore finale visualizzato. La funzione ROUND riceve il valore e il numero di cifre decimali da mantenere.
Divida sempre prima, usando l’aritmetica decimale, e arrotondi poi: non arrotondi mai prima della divisione.
SELECT
ROUND(CAST(1 AS DECIMAL) / 3, 4) AS four_places,
ROUND(CAST(1 AS DECIMAL) / 3, 2) AS two_places,
ROUND(CAST(1 AS DECIMAL) / 3, 0) AS zero_places;La divisione intera può essere utile
La divisione intera non è sempre un errore: a volte è esattamente ciò che serve. Ad esempio, convertire un numero totale di minuti in ore intere richiede intenzionalmente una divisione intera. L’importante è scegliere consapevolmente la divisione intera o decimale, invece di ritrovarsi a usarla per caso.
SELECT
137 / 60 AS full_hours,
137 % 60 AS remaining_minutes;Controllo rapido
Verifichi la Sua comprensione della divisione intera e decimale in SQL.
Riepilogo della lezione
In questa lezione ha imparato come SQL gestisce la divisione tra interi:
- Integer / Integer tronca il risultato: la parte decimale viene persa senza alcun avviso.
- Utilizzi
CAST(value AS DECIMAL)su almeno uno degli operandi per forzare la divisione decimale. - Anche la scrittura di un valore letterale decimale come
1.0converte l’espressione all’aritmetica decimale. - Utilizzi
ROUNDdopo la divisione per controllare il numero di cifre decimali visualizzate. - La divisione intera a volte è intenzionale, ad esempio per convertire i minuti in ore, ma la scelga sempre consapevolmente invece di usarla per errore.
Faccia attenzione a questo problema ogni volta che divide colonne intere: è una delle cause più comuni di bug silenziosi e difficili da individuare nelle query SQL.
Domande Frequenti
La lezione «Divisione tra interi e decimali» è gratuita?
Sì — il testo completo di «Divisione tra interi e decimali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Divisione tra interi e decimali»?
Eviti risultati sorprendenti usando il casting Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Divisione tra interi e decimali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Aritmetica e operatori
- Arrotondamento e troncamento
- Divisione tra interi e decimali
- Funzioni matematiche utili