Clausola HAVING nelle funzioni di aggregazione SQL

Clausola HAVING nelle funzioni di aggregazione SQL

In questo tutorial, discuteremo alcuni modi in cui possiamo utilizzare o eseguire la clausola HAVING nelle funzioni di aggregazione SQL . L'utilizzo di questa clausola nelle funzioni di aggregazione SQL può essere di grande aiuto nel riepilogo dei dati.

La clausola HAVING è quasi simile all'istruzione WHERE e può anche essere eseguita insieme ad essa.

Discuteremo le loro correlazioni e differenze fornendo esempi durante questo tutorial.

Sommario

GROUP BY E WHERE Dichiarazioni In SQL

Per il nostro primo esempio, discuteremo come eseguire la clausola WHERE e GROUP BY utilizzando la tabella di esempio riportata di seguito. Tieni presente che possiamo utilizzare la clausola WHERE solo con le colonne esistenti e non solo nelle funzioni di aggregazione.

Clausola HAVING nelle funzioni di aggregazione SQL

Supponiamo di voler ottenere le vendite totali di un prodotto in base alla colonna SaleAmount in cui il valore è maggiore di 2 . Per ottenere il risultato, il nostro comando dovrebbe essere il seguente:

Clausola HAVING nelle funzioni di aggregazione SQL

Innanzitutto, selezioniamo ProductName e aggreghiamo SaleAmount per ottenere TotalSales

Clausola HAVING nelle funzioni di aggregazione SQL

Quindi, abbiamo utilizzato l' istruzione WHERE qui poiché stiamo cercando di ottenere solo i prodotti in cui SaleAmount è maggiore di 2. Il comando "GROUP BY ProductName" indica che raggrupperà le righe sotto la colonna ProductName in una sola.

Eseguendo il nostro set di comandi, vedremo che tra tutti i dati nelle colonne ProductName e SaleAmount , sono stati visualizzati solo Bulb e Fan . Questo perché erano gli unici ad avere un SaleAmount maggiore di 2.

Clausola HAVING nelle funzioni di aggregazione SQL

In questo esempio, l' istruzione WHERE serve per filtrare i risultati con una colonna esistente, che è il nostro SaleAmount . Si noti inoltre che l' istruzione WHERE viene visualizzata prima di GROUP BY e non può essere utilizzata per filtrare le funzioni di aggregazione. D'altra parte, la clausola HAVING appare dopo GROUP BY e viene utilizzata per filtrare in base a una funzione aggregata. 

GROUP BY e clausola HAVING in SQL

In questo esempio, dimostreremo la differenza tra l' istruzione WHERE e la clausola HAVING . Useremo lo stesso obiettivo che abbiamo nell'esempio precedente in modo da poter confrontare e valutare i risultati. 

Per prima cosa mostriamo i prodotti con le loro vendite totali utilizzando il comando seguente. Come puoi vedere, il nostro primo comando è sempre lo stesso del nostro primo comando che esegue l' istruzione WHERE .

Clausola HAVING nelle funzioni di aggregazione SQL

Se dobbiamo eseguire i nostri primi due comandi, avremo il seguente risultato:

Clausola HAVING nelle funzioni di aggregazione SQL

Ora, supponiamo di voler visualizzare solo i prodotti la cui vendita totale è superiore a 5. Non possiamo utilizzare l' istruzione WHERE  poiché può essere utilizzata solo con le colonne esistenti. Pertanto, dobbiamo utilizzare la clausola HAVING poiché filtreremo da una funzione aggregata. 

Clausola HAVING nelle funzioni di aggregazione SQL

Si noti come usiamo la clausola HAVING dopo GROUP BY a differenza dell'istruzione WHERE utilizzata prima di GROUP BY. Questo perché l'SQL raggrupperà i record prima di valutare la clausola HAVING

Eseguiamo quindi questi comandi insieme a HAVING SUM(SaleAmount)>5 . Dopo aver specificato che vogliamo ottenere solo quei prodotti il ​​cui prezzo totale è maggiore di 5, noteremo che nella nostra attuale tabella dei risultati non vedremo più la Penna . Questo perché il suo totale è inferiore a 5

Clausola HAVING nelle funzioni di aggregazione SQL

In breve, quando vogliamo filtrare i dati dalla nostra tabella in base a una colonna esistente, utilizziamo la clausola WHERE , mentre quando vogliamo filtrare i dati da una funzione aggregata, utilizziamo la clausola HAVING

Clausola HAVING e WHERE in SQL Server Management Studio (SSMS)

Ora, andremo avanti discutendo e dimostrando come possiamo eseguire la clausola HAVING in SQL Server Management Studio (SSMS). Affronteremo anche la differenza tra la clausola HAVING e la clausola WHERE fornendo esempi.

Di seguito sono mostrati i nostri dati di esempio SalesOrderHeader. Questi dati sono costituiti da 100 righe. Per il nostro esempio, vogliamo ottenere TotalSale da CustomerID dove TotalSale è maggiore di 10000 . Si noti che la vendita totale è basata sulla somma dei valori della colonna TotalDue .

Clausola HAVING nelle funzioni di aggregazione SQL

Innanzitutto, lasciatemi dimostrare perché non possiamo usare la clausola WHERE quando vogliamo filtrare una funzione aggregata basata sul nostro esempio sopra. 

Useremo il set di comandi di esempio dall'immagine qui sotto. Come puoi vedere, tecnicamente abbiamo lo stesso set di comandi di quello che abbiamo dal nostro primo esempio.

Tuttavia, quando clicchiamo su Execute nell'angolo in alto a sinistra, si verificherà un errore perché non possiamo utilizzare la clausola WHERE da sola quando filtriamo sulla funzione di aggregazione.

Clausola HAVING nelle funzioni di aggregazione SQL

Per correggere l'errore, dobbiamo filtrare il risultato utilizzando la clausola HAVING invece della clausola WHERE . Il nostro nuovo set di comandi dovrebbe essere simile all'immagine qui sotto.

Clausola HAVING nelle funzioni di aggregazione SQL

Ora possiamo vedere che il nostro errore è stato corretto e contiene i risultati per CustomerID con un TotalSale maggiore di 10000 .

Di nuovo, la clausola WHERE viene sempre utilizzata prima della clausola GROUP BY , mentre la clausola HAVING viene sempre utilizzata dopo una clausola GROUP BY .

Utilizzo sia della clausola HAVING che della clausola WHERE in SQL  

Per questo esempio, supponiamo di voler utilizzare contemporaneamente la clausola WHERE e HAVING . Proviamo a ottenere TotalSale da CustomerID dove TotalSale è maggiore di 10000 ma solo con i clienti in cui il loro TerritoryID è uguale a 1

Poiché vogliamo filtrare i risultati con i clienti che hanno 1 come TerritoryID , utilizzeremo la clausola WHERE. Quindi il nostro comando dovrebbe essere lo stesso del precedente. Ancora una volta, abbiamo aggiunto una clausola WHERE prima della clausola GROUP BY.

Clausola HAVING nelle funzioni di aggregazione SQL

Per ora, non possiamo vedere molta differenza tra il nostro risultato precedente e questo nuovo. Tuttavia, se guardi da vicino nell'angolo in basso a destra, ora abbiamo solo 64 righe rispetto al precedente con 505 righe di dati. Questo perché i risultati vengono filtrati anche in base al loro TerritoryID .

Conclusione

Per riassumere, possiamo utilizzare la clausola WHERE solo con colonne esistenti. Se dobbiamo filtrare con funzioni aggregate, dobbiamo invece utilizzare la clausola HAVING .

L'utilizzo della clausola HAVING nelle funzioni di aggregazione SQL e la pratica dei modi per eseguire insieme la clausola HAVING e la clausola WHERE possono fornire agli utenti comodità quando lavorano su un numero elevato di dati o record. 

Spero di averti fornito informazioni e comprensione sufficienti su come utilizzare la clausola HAVING nelle funzioni di aggregazione SQL. Se desideri saperne di più su questo argomento e altri contenuti correlati, puoi sicuramente consultare l'elenco dei link pertinenti di seguito.

Ti auguro il meglio,

Hafiz


Power Automate si applica a ogni azione nei flussi di lavoro

Power Automate si applica a ogni azione nei flussi di lavoro

Scopri l

Tecniche di modellazione dei dati per organizzare le misure DAX

Tecniche di modellazione dei dati per organizzare le misure DAX

Tecniche di modellazione dei dati per organizzare meglio le misure DAX per un flusso di lavoro più efficiente.

Filtro Power Apps: cosè e come si usa?

Filtro Power Apps: cosè e come si usa?

Scopri come utilizzare la funzione di filtro in Power Apps e come incorporarla nelle formule esistenti all

Come commentare più righe in Python: una guida semplice e veloce

Come commentare più righe in Python: una guida semplice e veloce

Come commentare più righe in Python: una guida semplice e veloce

Connettori Power Automate: numero, testo e data e ora

Connettori Power Automate: numero, testo e data e ora

Acquisisci familiarità con i connettori Power Automate per la manipolazione di numeri, testo e date/ore.

Budget Vs Actual Vs Last Year - Suggerimenti per la rendicontazione finanziaria

Budget Vs Actual Vs Last Year - Suggerimenti per la rendicontazione finanziaria

Ora, è molto facile studiare il budget rispetto all

Come salvare e caricare un file RDS in R

Come salvare e caricare un file RDS in R

Imparerai come salvare e caricare oggetti da un file .rds in R. Questo articolo tratta anche come importare oggetti da R a LuckyTemplates.

Che cosè Power Query e M Language: una panoramica dettagliata

Che cosè Power Query e M Language: una panoramica dettagliata

Scopri tutto su Power Query e il linguaggio M per la trasformazione e la preparazione dei dati nel desktop di LuckyTemplates.

Cosè il sé in Python: esempi del mondo reale

Cosè il sé in Python: esempi del mondo reale

Cos'è il sé in Python: esempi del mondo reale

Rivisitazione dei primi N giorni lavorativi: una soluzione per il linguaggio di codifica DAX

Rivisitazione dei primi N giorni lavorativi: una soluzione per il linguaggio di codifica DAX

In questa esercitazione sul linguaggio di codifica DAX, scopri come usare la funzione GENERATE e come modificare dinamicamente il titolo di una misura.