Home / SQL Server 2016 / #4 T-SQL: La clausola HAVING

#4 T-SQL: La clausola HAVING

HAVING

Come già intravisto nel primo articolo di questa serie, la clausola HAVING consente di filtrare i gruppi e non le righe (le righe vengono filtrate con la clausola WHERE).

Poniamo di avere all’interno del nostro database la tabella Scuola con il seguente contenuto:

Partiamo da questa query di esempio:

SELECT   AnnoNascita,  LuogoNascita,  COUNT(*) as NumeroStudenti

FROM   [DBTUT ITA].[Scuola].[Studenti]

GROUP BY   AnnoNascita, LuogoNascita

HAVING COUNT(*) > 1

Nel nostro esempio, la clausola GROUP BY creerà un gruppo per ogni combinazione univoca di AnnoNascita e LuogoNascita:

Mentre la clausola HAVING filtrerà i gruppi prendendo solo quelli con COUNT maggiore di 1. Ecco il risultato finale della query:

Qui di seguito riportiamo un altro esempio di query che lavora sui gruppi:

SELECT AnnoNascita, LuogoNascita, COUNT(*) as NumeroStudenti

FROM [DBTUT ITA].[Scuola].[Studenti]

GROUP BY AnnoNascita, LuogoNascita

HAVING LuogoNascita=’Roma

In questo caso la clausola di HAVING ha filtrato i gruppi con LuogoNascita=Roma.

Buona giornata a tutti!

About Lara

Mi chiamo Lara (perché mia mamma guardava il film de Il dottor Živago), ho 35 anni e sono nata e cresciuta nell'entroterra marchigiano. Amo la mia terra, che è un pezzo del mio cuore. Gli altri pezzi sono a Madrid, Parigi (dove ho vissuto 3 anni per lavoro) e a Milano. Curiosità, passione, creatività, pragmaticità e problem solving mi contraddistinguono (i difetti non li scrivo mica pubblicamente!!!). Fotografia, tecnologia, arte, film, gialli, cibo ... e molto altro! Sono Co-founder di Geekotech.it e Geekotech.fr

Check Also

SQL Server 2016 : Come impostare invio mail in caso di fallimento del Job? (SSMS)

Ciao a tutti!! Oggi inauguriamo una nuova sezione del sito che si occuperà di SQL …

One comment

  1. Se l’ordine dell’esecuzione dei comandi è la seguente

    FROM: interroga le righe della tabella [Sales].[Orders]
    WHERE: filtra le righe per cui la colonna custid=71
    GROUP BY: raggruppa le righe per empid (id dipendente) e Year(Orderdate) (anno dell’ordine)
    HAVING: Filtra solo i gruppi di empid & Year(Orderdate) che hanno più di un ordine
    SELECT: per le righe ottenute restituiscimi i seguenti campi: empid, OrderYear, NumberOrders
    ORDER BY: ordina le righe per empid ed OrderYear

    ed eseguo questa query perchè non genera errore?

    SELECT AnnoNascita, LuogoNascita, COUNT(*) as NumeroStudenti
    FROM [DBTUT ITA].[Scuola].[Studenti]
    GROUP BY AnnoNascita, LuogoNascita
    HAVING NumeroStudenti > 1

    Ho usato l’alias (NumeroStudenti) del campo calcolato nella clausola having

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *