SQL: conteggi per fasce di valori

In questo articolo spiegherò come ottenere una classificazione per fasce di una serie di valori.

Una delle classificazione classiche di una lista di valori è per fasce (di prezzo, ad esempio): quanti articoli costano meno di 100 Euro? Quanti tra 100 e 200? e così via.

La soluzione migliore sarebbe di inserire la fascia già nel record da classificare, magari con un trigger. Questa però è una soluzione ‘statica’, che prevede una classificazione rigida decisa a priori.

Potrebbe invece essere necessario creare una classificazione arbitraria, momentanea e non decisa a priori.

Per ottenere questi tipo di prospetto, si può usare una combinazione di GROUP BY e CASE, come nell’esempio che segue:

SELECT 
   COUNT(Prezzo) AS [Numero Articoli],
	(CASE 
		WHEN Prezzo<1000 THEN 'Bassa'
		WHEN Prezzo>10000 THEN 'Alta'
		ELSE 'Media' END
         ) AS [Fascia di prezzo]
FROM
	Articoli
GROUP BY
	(CASE 
		WHEN Prezzo<1000 THEN 'Bassa'
		WHEN Prezzo>10000 THEN 'Alta'
		ELSE 'Media' END
        )

Otterremo quindi un elenco di quanti articoli sono nella fascia di prezzo ‘bassa’ (meno di 1.000 Euro), quanti nella fascia ‘Media’ (tra 1.000 e 10.000), e quanti nella fascia alta (più di 10.000 Euro).

Un’altra soluzione consiste nell’utilizzare una tabella di appoggio (fissa o temporanea) dove dichiarare le varie fasce, ed ottenere la classificazione con una JOIN.

Vedremo questa soluzione in un prossimo articolo.

Replica