9th Dec 2022 Tempo di lettura: 5 minuti Tutorial SQL HAVING Zahin Rahman sql imparare sql having Indice La funzione della clausola HAVING SQL La sintassi SQL HAVING Esempi di HAVING SQL Esempio 1: HAVING con COUNT() Esempio 2: HAVING con SUM() Esempio 3: HAVING con AVG() Padroneggiare la clausola HAVING di SQL Imparate a utilizzare la clausola HAVING di SQL per filtrare i gruppi utilizzando le condizioni da voi specificate. La clausola HAVING di SQL è spesso un concetto difficile da comprendere, soprattutto per i principianti. Inoltre, i suoi casi d'uso specifici possono essere difficili da visualizzare senza esempi specifici basati su set di dati reali. In questa esercitazione imparerete ad applicare la clausola SQL HAVING per filtrare gruppi di record in base a condizioni specifiche. Vedrete esempi di applicazione di questo concetto per risolvere problemi aziendali su un set di dati realistico. La funzione della clausola HAVING SQL La clausola SQL HAVING viene solitamente utilizzata con la clausola GROUP BY per filtrare gruppi di righe. Solo quando la condizione specificata è VERA, le righe vengono incluse nel gruppo. La clausola SQL GROUP BY organizza i dati in gruppi basati su valori comuni; viene utilizzata soprattutto per ottenere informazioni di riepilogo e calcolare statistiche aggregate. Se volete un aggiornamento più approfondito su questo argomento, consultate questo articolo su SQL GROUP BY. Si potrebbe fare un po' di confusione su WHERE e HAVING, ma la differenza è facilmente spiegabile. La clausola WHERE applica una condizione sull'intera colonna filtrando le singole righe. Non funziona con le funzioni aggregate come SUM() e AVG(). D'altra parte, HAVING pone condizioni di filtro sui gruppi creati dalla clausola GROUP BY. Può essere utilizzata con le funzioni aggregate. Ad esempio, consideriamo la tabella seguente. Mostra un elenco di clienti raggruppati per città in diversi Paesi. Se volessimo vedere i gruppi di città con 3 o più clienti, avremmo bisogno di una clausola HAVING che soddisfi questa condizione su ciascuna delle città (cioè i gruppi). CustomerIDCityCountry 009BerlinGermany 045BerlinGermany 101BerlinGermany 098BernSwitzerland 003BernSwitzerland 154Buenos AiresArgentina 111Buenos AiresArgentina 039Buenos AiresArgentina ……… 191WallaPoland In altre parole, la clausola HAVING è essenzialmente una clausola WHERE che opera sui record restituiti da GROUP BY. (Abbiamo anche un confronto più approfondito tra HAVING e WHERE se siete interessati ad approfondire). La sintassi SQL HAVING HAVING non funziona senza la clausola GROUP BY. Deve seguire la clausola GROUP BY in una query e deve precedere la clausola ORDER BY (se se ne usa una). Verranno restituiti solo i gruppi che soddisfano i criteri di HAVING. Per esempio, proviamo la seguente query sulla tabella customers tabella: SELECT COUNT(CustomerID), City, Country FROM Customers WHERE Country = 'Brazil' GROUP BY City, Country HAVING COUNT(CustomerID) > 1 Cosa succede in questa query? Innanzitutto, la clausola WHERE filtra le righe applicabili per il Paese "Brasile". In secondo luogo, la clausola GROUP BY raggruppa le voci in base ai valori delle colonne City e Country. In terzo luogo, la clausola HAVING filtra i gruppi: in questo caso, siamo interessati solo alle città brasiliane che hanno più di un cliente. Il corso LearnSQL.it SQL Basics copre la sintassi e l'applicazione della clausola HAVING in un ambiente coinvolgente e interattivo. Se volete fare pratica, ve lo consiglio. Ma prima, vediamo altri esempi di HAVING. Esempi di HAVING SQL Vediamo alcuni esempi che presentano diverse funzioni aggregate, in modo da capire come funziona davvero la clausola HAVING. Utilizzeremo la seguente tabella clienti OrderDetails cliente. Essa contiene un totale di 518 righe di dati relativi a ordini semplici. Sono incluse informazioni quali Quantity e ProductID ordinati e un OrderID univoco per ogni ordine. OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 510249142 6102495140 ………… 518104432812 In qualità di analista di dati, uno dei vostri compiti principali è quello di ottenere informazioni sui dati di vendita. Esploreremo tre semplici problemi che mirano a trovare alcune di queste intuizioni. Esempio 1: HAVING con COUNT() PROBLEMA: Elencare tutti i prodotti con più di 12 ordini individuali effettuati. DOMANDA: SELECT COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING COUNT(ProductID) > 12 RISULTATO: Number of Records: 5 COUNT(ProductID)ProductID 1431 1459 1362 1371 1472 Se non avessimo incluso la clausola HAVING, questa query restituirebbe essenzialmente il numero di record pari al numero univoco di ProductIDs. Qui, GROUP BY mette in gruppo gli ordini con lo stesso ProductID. Quindi, la clausola HAVING pone la condizione di filtraggio su ciascuno di questi gruppi e restituisce quelli che hanno un conteggio superiore a 12. Esempio 2: HAVING con SUM() PROBLEMA: Elencare tutti i prodotti per i quali sono state ordinate più di 350 quantità totali. DOMANDA: SELECT SUM(Quantity), ProductID FROM OrderDetails GROUP BY ProductID HAVING SUM(Quantity) > 350 ORDER BY SUM(Quantity) DESC RISULTATO: Number of Records: 3 COUNT(ProductID)ProductID 45831 43060 36935 Nell'esempio precedente, GROUP BY raggruppa in modo simile gli ordini per ProductID. Quindi, la clausola HAVING pone la condizione di filtraggio (la somma della colonna Quantity deve essere superiore a 350) su ciascuno di questi gruppi. Infine, ORDER BY restituisce i risultati in ordine decrescente. Esempio 3: HAVING con AVG() PROBLEMA: Elencare tutti i prodotti che hanno avuto più di 35 quantità ordinate in media e almeno 4 ordini effettuati. DOMANDA: SELECT AVG(Quantity), COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING AVG(Quantity) > 35 AND COUNT(ProductID) > 3 ORDER BY AVG(Quantity) DESC RISULTATO: Number of Records: 6 AVG(Quantity)ProductIDCOUNT(ProductID) 41.25234 41359 38.75584 35.836012 35.6445 35.11339 Nell'esempio 3, dopo aver raggruppato gli ordini in base a ProductID, la clausola HAVING pone due condizioni di filtraggio sui gruppi: una quantità media di ordini superiore a 35 e un numero di ordini singoli superiore a 3. Sulla base dei tre esempi precedenti, abbiamo appreso che ProductID 31, ad esempio, è stato incluso nel maggior numero di ordini singoli (14) e ha avuto anche il maggior numero di quantità ordinate tra tutti gli ordini effettuati (458). Questo è sicuramente uno dei prodotti più popolari del negozio! Inoltre, ProductIDs 23, 35 e 58 hanno registrato le quantità medie più elevate per ordine. Informazioni chiave come queste sono preziose e consentono alle aziende di sapere su quali prodotti concentrarsi e come commercializzarli. Padroneggiare la clausola HAVING di SQL Come abbiamo appena visto, la clausola HAVING è indispensabile per calcolare valori aggregati su gruppi di dati. Pertanto, viene sempre utilizzata in combinazione con la clausola GROUP BY e limita i dati ai record raggruppati piuttosto che ai singoli record. Se volete saperne di più sull'uso della clausola HAVING di SQL, provate il nostro corso SQL Basics . Copre in dettaglio la clausola HAVING e spiega meglio come raggruppare, filtrare e ordinare i dati. Ci sono anche molti problemi pratici e quiz che permettono di prendere confidenza con l'SQL di base. Tags: sql imparare sql having