Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
si applica a:SQL Server
Quando si creano query di aggregazione, gli strumenti di Progettazione query e Progettazione viste (Visual Database Tools) fanno alcuni presupposti in modo da poter costruire una query valida. Ad esempio, se si sta creando una query di aggregazione e si contrassegna una colonna di dati per l'output, Progettazione query e Progettazione viste crea automaticamente la parte della colonna della GROUP BY clausola in modo da non tentare inavvertitamente di visualizzare il contenuto di una singola riga in un riepilogo.
Usare Group By
Il Disegnatore di Query e Viste utilizza le seguenti linee guida per lavorare con le colonne:
Quando si sceglie l'opzione Raggruppa per o si aggiunge una funzione di aggregazione a una query, tutte le colonne contrassegnate per l'output o usate per l'ordinamento vengono aggiunte automaticamente alla
GROUP BYclausola . Le colonne non vengono aggiunte automaticamente allaGROUP BYclausola se fanno già parte di una funzione di aggregazione.Se non si desidera che una colonna specifica faccia parte della
GROUP BYclausola , è necessario modificarla manualmente selezionando un'opzione diversa nella colonna Raggruppa per del riquadro Criteri. Tuttavia, Progettazione query e Progettazione viste non impedisce di scegliere un'opzione che può generare una query che non viene eseguita.Se si aggiunge manualmente una colonna di output di query a una funzione di aggregazione nel riquadro Criteri o SQL, Progettazione query e Progettazione viste non rimuove automaticamente altre colonne di output dalla query. Pertanto, è necessario rimuovere le colonne rimanenti dall'output della query o renderle parte della
GROUP BYclausola o di una funzione di aggregazione.
Quando si immette una condizione di ricerca nella colonna Filtro del riquadro Criteri, la Progettazione query e la Progettazione viste seguono queste regole:
Se la colonna Group By della griglia non viene visualizzata (perché non è stata ancora specificata una query di aggregazione), la condizione di ricerca viene inserita nella
WHEREclausola .Se si è già in una query di aggregazione e si è selezionata l'opzione Where nella colonna Group By , la condizione di ricerca viene inserita nella
WHEREclausola .Se la colonna Group By contiene un valore diverso da Where, la condizione di ricerca viene inserita nella
HAVINGclausola .
Usare le clausole HAVING e WHERE
I principi seguenti descrivono come fare riferimento alle colonne in una query di aggregazione nelle condizioni di ricerca. In generale, è possibile usare una colonna in una condizione di ricerca per filtrare le righe che devono essere riepilogate (una WHERE clausola) o per determinare quali risultati raggruppati vengono visualizzati nell'output finale (una HAVING clausola).
Le singole colonne di dati possono essere visualizzate nella
WHEREclausola oHAVING, a seconda di come vengono usate altrove nella query.WHEREle clausole vengono utilizzate per selezionare un subset di righe per il riepilogo e il raggruppamento e vengono quindi applicate prima di eseguire qualsiasi raggruppamento. Pertanto, è possibile usare una colonna di dati in unaWHEREclausola anche se non fa parte dellaGROUP BYclausola o contenuta in una funzione di aggregazione. Ad esempio, l'istruzione seguente seleziona tutti i titoli che costano più di $10,00 e calcola la media del prezzo:SELECT AVG(price) FROM titles WHERE price > 10;Se si crea una condizione di ricerca che coinvolge una colonna usata anche in una clausola o in una
GROUP BYfunzione di aggregazione, la condizione di ricerca può essere visualizzata comeWHEREclausola oHAVINGclausola . È possibile decidere quale quando si crea la condizione. Ad esempio, l'istruzione seguente crea un prezzo medio per i titoli per ogni editore, quindi visualizza la media per gli editori in cui il prezzo medio è maggiore di $ 10,00:SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10);Se si usa una funzione di aggregazione in una condizione di ricerca, la condizione include un riepilogo e deve quindi far parte della
HAVINGclausola .