Condividi tramite


Usare colonne nelle query di aggregazione (Visual Database Tools)

si applica a:SQL Server

Quando si creano query di aggregazione, Progettazione Query e Viste fa certe ipotesi in modo da poter costruire una query valida. Ad esempio, se si crea una query di aggregazione e si contrassegna una colonna di dati per l'output, il Progettista di query e viste crea automaticamente la colonna parte della clausola GROUP BY in modo da non tentare inavvertitamente di visualizzare i contenuti di una singola riga in un riepilogo.

Uso di Group By

Il Disegnatore di Query e Viste utilizza le seguenti linee guida per lavorare con le colonne:

  • Quando si sceglie l'opzione Group By 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 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 che una colonna specifica faccia parte della clausola GROUP BY, è necessario modificarla manualmente selezionando un'opzione diversa nella colonna Raggruppa per del riquadro Criteri. Tuttavia, Progettazione Query e Query View Designer non impediranno di scegliere l'opzione che può generare una query e che potrebbe non funzionare.

  • Se si aggiunge manualmente una colonna di output della query a una funzione di aggregazione nel riquadro Criteri o SQL, il Progettista di query e di viste non rimuove automaticamente altre colonne di output dalla query. Pertanto, è necessario rimuovere le colonne rimanenti dall'output della query o renderle parte della clausola GROUP BY 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 clausola WHERE.

  • 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 clausola WHERE.

  • Se la colonna Group By contiene qualsiasi valore diverso da Where, la condizione di ricerca viene inserita nella clausola HAVING.

Utilizzo delle 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 clausola WHERE) o per determinare quali risultati raggruppati vengono visualizzati nell'output finale (una clausola HAVING).

  • Le singole colonne di dati possono essere visualizzate nella clausola WHERE o HAVING, a seconda di come vengono usate altrove nella query.

  • Le clausole WHERE 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 utilizzare una colonna di dati in una clausola WHERE anche se non fa parte della clausola GROUP BY 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 include una colonna utilizzata anche in una clausola GROUP BY o in una funzione di aggregazione, la condizione di ricerca può essere visualizzata come clausola WHERE o una clausola HAVING. È 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 clausola HAVING.

Vedere anche

Riepilogare i risultati delle query (Visual Database Tools)
Ordinare e raggruppare i risultati delle query (Visual Database Tools)