Condividi tramite


Usare le colonne nelle query di aggregazione (Visual Database Tools)

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 BY clausola . Le colonne non vengono aggiunte automaticamente alla GROUP BY clausola se fanno già parte di una funzione di aggregazione.

    Se non si desidera che una colonna specifica faccia parte della GROUP BY clausola , è 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 BY clausola 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 WHERE clausola .

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

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

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 WHERE clausola o HAVING , a seconda di come vengono usate altrove nella query.

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