Utilizzo di colonne nelle query di aggregazione
Quando si creano query di aggregazione, in Strumenti di Progettazione query e Progettazione visualizzazioni le operazioni vengono eseguite sulla base di alcuni presupposti che garantiscono la costruzione di una query valida.Se, ad esempio, si crea una query di aggregazione e si contrassegna una colonna di dati per l'output, in Progettazione query e Progettazione visualizzazioni la colonna viene automaticamente inserita nella clausola GROUP BY, in modo che non sia possibile visualizzare inavvertitamente il contenuto di una singola riga in un riepilogo.
Utilizzo dell'opzione Raggruppa
In Progettazione query e Progettazione visualizzazioni vengono utilizzate le seguenti regole per le operazioni con le colonne:
Quando si sceglie l'opzione Raggruppa o si aggiunge una funzione di aggregazione a una query, tutte le colonne contrassegnate per l'output o utilizzate per l'ordinamento vengono aggiunte automaticamente alla clausola GROUP BY.Le colonne non vengono aggiunte automaticamente alla clausola GROUP BY se fanno già parte di una funzione di aggregazione.
Se non si desidera inserire una determinata colonna nella clausola GROUP BY, è necessario modificarla manualmente selezionando una diversa opzione nella colonna Raggruppa del riquadro Criteri.È possibile, tuttavia, scegliere un'opzione che può dare come risultato una query non eseguibile.
Se si aggiunge manualmente una colonna di output della query a una funzione di aggregazione nel riquadro Criteri o SQL, in Progettazione query e Progettazione visualizzazioni le altre colonne di output non verranno rimosse automaticamente dalla query.Di conseguenza, sarà necessario rimuovere le restanti colonne dall'output della query o inserirle in una clausola GROUP BY o in una funzione di aggregazione manualmente.
Quando si immette una condizione di ricerca nella colonna Filtro del riquadro Criteri, in Progettazione query e Progettazione visualizzazioni vengono rispettate le seguenti regole:
Se la colonna Raggruppa della griglia non è visualizzata perché non è stata ancora specificata una query di aggregazione, la condizione di ricerca verrà inserita nella clausola WHERE.
Se ci si trova già in una query di aggregazione ed è stata selezionata l'opzione Where nella colonna Raggruppa, la condizione di ricerca verrà inserita nella clausola WHERE.
Se la colonna Raggruppa contiene un valore diverso da Where, la condizione di ricerca verrà inserita nella clausola HAVING.
Utilizzo delle clausole HAVING e WHERE
I seguenti principi descrivono come fare riferimento a colonne nelle condizioni di ricerca per una query di aggregazione.In generale, è possibile utilizzare una colonna in una condizione di ricerca per filtrare le righe da riepilogare (una clausola WHERE) o per determinare quali risultati raggruppati saranno presenti nell'output finale (una clausola HAVING).
Le singole colonne di dati possono essere inserite nella clausola WHERE o HAVING, in base a come vengono utilizzate in altri punti della query.
Le clausole WHERE vengono utilizzate per selezionare un sottoinsieme di righe per i riepiloghi e i raggruppamenti e vengono pertanto applicate prima dell'esecuzione del raggruppamento.Di conseguenza, è possibile utilizzare una colonna di dati in una clausola WHERE anche se non fa parte della clausola GROUP BY o non è contenuta in una funzione di aggregazione.La seguente istruzione seleziona, ad esempio, tutti i libri che costano più di 10 dollari e calcola il prezzo medio:
SELECT AVG(price) FROM titles WHERE price > 10
Se si crea una condizione di ricerca che coinvolge una colonna utilizzata anche in una clausola GROUP BY o in una funzione di aggregazione, la condizione di ricerca potrà essere indicata come una clausola WHERE o HAVING. La clausola da utilizzare può essere scelta quando si definisce la condizione.La seguente istruzione calcola, ad esempio, il prezzo medio dei libri di ogni editore, quindi visualizza la media calcolata per gli editori il cui prezzo medio è maggiore di 10 dollari.
SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10)
Se si utilizza una funzione di aggregazione in una condizione di ricerca, la condizione richiederà un riepilogo e dovrà pertanto essere inserita nella clausola HAVING.