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


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

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 blog tratterà anche come importare oggetti da R a LuckyTemplates.

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.

Mostra approfondimenti utilizzando la tecnica di visualizzazione dinamica multi-thread in LuckyTemplates

Mostra approfondimenti utilizzando la tecnica di visualizzazione dinamica multi-thread in LuckyTemplates

Questo tutorial illustrerà come utilizzare la tecnica di visualizzazione dinamica multi-thread per creare approfondimenti dalle visualizzazioni di dati dinamici nei report.

Introduzione al filtraggio del contesto in LuckyTemplates

Introduzione al filtraggio del contesto in LuckyTemplates

In questo articolo, esaminerò il contesto del filtro. Il contesto del filtro è uno degli argomenti principali che qualsiasi utente di LuckyTemplates dovrebbe inizialmente conoscere.

I migliori suggerimenti per lutilizzo delle app nel servizio online LuckyTemplates

I migliori suggerimenti per lutilizzo delle app nel servizio online LuckyTemplates

Voglio mostrare come il servizio online di LuckyTemplates Apps può aiutare nella gestione di diversi report e approfondimenti generati da varie fonti.

Analizza le variazioni del margine di profitto nel tempo: analisi con LuckyTemplates e DAX

Analizza le variazioni del margine di profitto nel tempo: analisi con LuckyTemplates e DAX

Scopri come elaborare le modifiche al margine di profitto utilizzando tecniche come la ramificazione delle misure e la combinazione di formule DAX in LuckyTemplates.

Idee di materializzazione per cache di dati in DAX Studio

Idee di materializzazione per cache di dati in DAX Studio

Questo tutorial discuterà delle idee di materializzazione delle cache di dati e di come influiscono sulle prestazioni dei DAX nel fornire risultati.

Reporting aziendale tramite LuckyTemplates

Reporting aziendale tramite LuckyTemplates

Se finora utilizzi ancora Excel, questo è il momento migliore per iniziare a utilizzare LuckyTemplates per le tue esigenze di reportistica aziendale.

Che cosè il gateway LuckyTemplates? Tutto quello che devi sapere

Che cosè il gateway LuckyTemplates? Tutto quello che devi sapere

Che cos'è il gateway LuckyTemplates? Tutto quello che devi sapere