0Pricing
SQL Academy · Lezione

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.0 converte l’espressione all’aritmetica decimale.
  • Utilizzi ROUND dopo 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

  1. Aritmetica e operatori
  2. Arrotondamento e troncamento
  3. Divisione tra interi e decimali
  4. Funzioni matematiche utili
← Torna a SQL Academy