Torna all'elenco degli articoli Articoli
Tempo di lettura: 12 minuti

Query SQL per Google Sheets

Potenziate le vostre capacità di analisi dei dati utilizzando le query SQL per Google Sheets! Questa guida completa mostra come utilizzare la funzione QUERY per combinare la potenza di SQL con l'accessibilità di Google Sheets!

Volete rendere più veloce e potente l'analisi dei dati in Google Sheets? La funzione QUERY consente di filtrare, ordinare e analizzare i dati proprio come in SQL, senza lasciare il foglio di calcolo! In questo articolo vi spiegheremo tutto ciò che vi serve per iniziare a usare le query SQL per i Google Sheets. Immergiamoci!

Perché usare l'SQL con Google Sheets?

Google Sheets è un popolare servizio di fogli di calcolo online che consente agli utenti di lavorare e collaborare comodamente da qualsiasi luogo con una connessione a Internet. Insieme ad altri fogli di calcolo, Google Sheets è uno strumento popolare per l'analisi dei dati, essendo facile da usare e adatto ai principianti.

Tuttavia, creare rapporti complessi con le sole funzioni di base disponibili in Google Sheets può essere difficile. Operazioni come il filtraggio di dati complessi, la creazione di riepiloghi a più livelli o la combinazione di grandi insiemi di dati richiedono spesso molto lavoro manuale, rendendo il processo lungo e a rischio di errori.

È qui che entra in gioco l'SQL! Google Sheets consente di scrivere query di tipo SQL direttamente all'interno dei fogli di calcolo, operando sui dati esistenti e fornendo risposte dinamiche proprio come le normali funzioni. Sembra interessante? Vediamo come iniziare a usare l'SQL con Google Sheets.

Usare la funzione QUERY di Google Sheets

La funzione QUERY di Google Sheets ha una sintassi simile a quella dell'SQL, per cui tutte le vostre competenze esistenti si tradurranno in modo adeguato. La sintassi verrà discussa in dettaglio tra poco, ma prima vediamo alcuni dati di esempio che utilizzeremo per illustrare la funzione QUERY:

Query SQL per Google Sheets

Si tratta di un estratto di uno dei database del nostro corsoSQL per principianti , semplificato per adattarsi alle nostre esigenze attuali.

Sintassi generale

La sintassi generale per l'utilizzo della funzione QUERY è la seguente:

=QUERY(data_range, query, [headers])

I componenti sono:

  • data_range è l'intervallo di righe in cui sono memorizzati i dati di partenza.
  • query è la query stessa, di cui parleremo tra poco.
  • headers è il numero di righe di intestazione nell'intervallo di dati (spesso 1 o 0). È opzionale. Viene impostato automaticamente se non viene fornito, quindi il più delle volte questo parametro viene omesso.

Vediamo alcuni esempi di query che utilizzano il set di dati di cui sopra. Nota: qui e in tutti gli esempi successivi, data_range indica l'intervallo di righe per la funzione QUERY, cioè la tabella in cui sono memorizzati i dati per la query SQL.

Google Sheets vs. Query di Esempio SQL

Google Sheets

SQL

Spiegazione

=QUERY(data_range, "select *", 1)

SELECT *
FROM data_range;

Recupera tutti i dati nell'intervallo di dati.

=QUERY(data_range, "select *")

SELECT *
FROM data_range;

Recupera anche tutti i dati nell'intervallo, ma lascia che Google Sheets decida quante righe di intestazione ci sono. Da ora in poi eviteremo l'argomento header, poiché Google Sheets può dedurlo in modo affidabile.

=QUERY(data_range, "select A, B")

SELECT
  Department
  First_Name
FROM data_range;

Recupera solo i nomi dei reparti e i nomi dei dipendenti (memorizzati nelle colonne A e B).

Filtrare i dati

La sintassi della funzione QUERY per filtrare i dati è simile alla sintassi SQL:

Google Sheets:

=QUERY(data_range, “select * where <condition>”)

SQL:

SELECT * FROM data_range WHERE <condition>;

Esaminiamo alcuni esempi di come la funzione QUERY si confronta con l'SQL in termini di filtraggio dei dati:

Google Sheets

SQL

Spiegazione

=QUERY(data_range, "select * where D > 3000")

SELECT *
FROM data_range
WHERE Salary > 3000;

Filtri che utilizzano numeri.
Recupera tutti i dati dei dipendenti che hanno uno stipendio (colonna D) superiore a 3000.

=QUERY(data_range, "select * where A = 'IT'")

SELECT *
FROM data_range
WHERE Department = ‘IT’;

Filtri tramite testo.
Recupera tutti i dati dei dipendenti che lavorano nel reparto IT (colonna A).

=QUERY(data_range, "select * where E = ‘Trainee’ and D >= 3000”)

SELECT *
FROM data_range
WHERE Position = ‘Trainee’
  AND Salary >= 3000;

Filtri che utilizzano più condizioni.
Recupera tutti i dati per i tirocinanti (colonna E) che hanno uno stipendio di 3000 o più (colonna D).

=QUERY(data_range, “select * where B starts with ‘J’”)

SELECT *
FROM data_range
WHERE First_Name LIKE ‘J%’;

Filtra in base a una determinata parte di una stringa.
Recupera tutti i dati sui dipendenti il ​​cui nome inizia con la lettera J.
Esistono anche altre funzioni dello stesso tipo in Google Sheets; vedere l'elenco completo di seguito.

La condizione WHERE può filtrare numeri, testo e molto altro:

  • I numeri supportano tutti questi operatori: <=, <, >, >=, =, !=, <> . Sia != che <> significano "non uguale" e possono essere usati in modo intercambiabile.
  • Per filtrare i valori di null, si deve usare is null o is not null. Si noti che <column> = null and <column>!= null darà un errore.
  • Sono disponibili diverse funzioni per filtrare i dati di testo all'interno della funzione QUERY:
    • starts with filtra in base ai primi caratteri della stringa. starts with ‘A’ corrisponderà a tutti questi: "Accounting", "Amelia", "A".
    • ends with filtra in base agli ultimi caratteri della stringa. ends with ‘nt’ corrisponderà a tutti questi: "management", "Ant", "nt".
    • contains filtra in base alla sottostringa. contains ‘r’ corrisponderà a tutti questi: "Harry", "Taylor", "r".
    • matches filtra utilizzando le espressioni regolari (regex), cioè uno schema che descrive una stringa.
    • like filtra in modo simile a LIKE in SQL. In Sheets, supporta due caratteri jolly: %“_” like ‘_o%’ corrisponde a tutti questi caratteri: "Poole", "ooze", "to".

Per unire più condizioni in una sola, si possono usare le parole chiave e e o:

  • <condition1> and <condition2> sarà vera solo se entrambe sono vere.
  • <condition1> or <condition2> sarà vera quando una o entrambe sono vere.

Per filtrare in base all'inverso della condizione si può usare la parola chiave not: where D > 3000 darebbe lo stesso risultato di where not D <= 3000.

Ordinamento dei dati

L'ordinamento nella funzione QUERY è simile all'ordinamento in SQL. Ecco la sintassi di base:

Google Sheets:

=QUERY(data_range, “select * order by <column> [asc/desc]”)

SQL:

SELECT * FROM data_range ORDER BY <column> [ASC/DESC];

Vediamo il confronto con alcuni esempi:

Google Sheets

SQL

Spiegazione

=QUERY(data_range, “select B order by B”)

SELECT First_Name
FROM data_range
ORDER BY First_Name;

Ordina per una colonna; è implicito l'ordine ASC (crescente).

Restituisce tutti i nomi dei dipendenti in ordine alfabetico.

=QUERY(data_range, “select A, B order by A, B desc”)

SELECT
  Department,
  First_Name
FROM data_range
ORDER BY
  Department,
  First_Name DESC;

Ordina per più colonne in ordine diverso.

Restituisce i reparti e i nomi dei dipendenti, ordinati per reparto in ordine alfabetico e, all'interno di ogni reparto, per nome in ordine alfabetico inverso.

Se non si specifica la direzione dell'ordinamento, per impostazione predefinita viene utilizzato l'ordine crescente. Ciò significa che le stringhe saranno mostrate in ordine alfabetico e i numeri saranno mostrati dal più piccolo al più grande. Specificando esplicitamente … order by A asc … si otterrà lo stesso risultato che evitando di specificare l'ordine: … order by A ….

Se si desidera specificare diverse direzioni di ordinamento per diverse colonne, è necessario specificare l'ordine per ogni colonna. Ad esempio, questo ...

=QUERY(data_range, “select A, B order by A, B, C desc”)

... ordinerà solo la colonna C in ordine decrescente. Ecco il modo corretto per ordinare tutte le colonne in ordine decrescente:

=QUERY(data_range, “select A, B order by A desc, B desc, C desc”)

Funzioni aggregate e raggruppamento

La funzione QUERY supporta diverse funzioni aggregate di SQL. Nel caso in cui non le conosciate, le funzioni aggregate prendono in input un gruppo di righe e restituiscono un singolo valore. (I gruppi sono solitamente basati su valori condivisi in una determinata colonna; ne parleremo più avanti. Se non si specifica una colonna di raggruppamento, l'intero set di dati è il gruppo).

Le funzioni di aggregazione supportate da QUERY di Google Sheets sono:

  • count(col) - Restituisce il numero di valori non nulli della colonna col.
  • max(col) - Restituisce il valore più grande da col. Quando si confrontano le date, le date precedenti vengono trattate come "più piccole". Le stringhe vengono confrontate in ordine alfabetico e sono sensibili alle maiuscole.
  • min(col) Restituisce il valore più piccolo da col.
  • sum(col) - Restituisce la somma totale dei valori numerici in col.
  • avg(col) - Restituisce la media dei valori numerici in col.

Ecco alcuni esempi di funzioni aggregate utilizzate da sole, senza raggruppamento:

Google Sheets

SQL

Spiegazione

=QUERY(data_range, “select avg(D)”)

SELECT AVG(Salary)
FROM data_range;

Utilizzando la funzione avg() da sola, si utilizza l'intero intervallo di dati come input.

Restituisce lo stipendio medio di tutti i dipendenti dell'azienda.

=QUERY(data_range, “select count(B)”)

SELECT COUNT(First_Name)
FROM data_range;

Stesso principio; senza gruppi, count() conta il numero di righe nella colonna B per l'intero set di dati.

Restituisce il numero totale di dipendenti contando i loro nomi. Nota che i valori nulli sono omessi; per ottenere il conteggio corretto delle righe, dobbiamo assicurarci di contare una colonna non nulla.

Per raggruppare le righe in base al valore di una colonna in QUERY, si utilizza la parola chiave group by (proprio come in SQL). Ecco un confronto tra le due sintassi:

Google Sheets:

=QUERY(data_range, “select <data> group by <columns>”)

SQL:

SELECT <data> FROM data_range GROUP BY <columns>;

La parola chiave group by raggruppa le righe in base ai valori condivisi nelle colonne fornite, creando una singola riga per ogni valore distinto. Quando si utilizza il gruppo per, tutte le colonne finali devono essere una funzione aggregata o essere utilizzate nella clausola group by.

Il risultato viene ordinato automaticamente in base alle colonne di raggruppamento, ma questo può essere annullato usando order by.

Ecco alcuni esempi di utilizzo di group by con funzioni aggregate:

Google Sheets

SQL

Spiegazione

=QUERY(data_range, “select A, avg(D) group by A”)

SELECT
  Department,
  AVG(Salary)
FROM data_range
GROUP BY Department
ORDER BY Department;

Restituisce lo stipendio medio tra i dipendenti di ogni reparto.

Nota che l'equivalente SQL include la clausola ORDER BY, ma QUERY no. Quando si usa group by con QUERY, il risultato viene ordinato automaticamente.

=QUERY(data_range, “select E, count(B) group by E” order by count(B) desc)

SELECT
  Position,
  COUNT(First_Name)
FROM data_range
GROUP BY Position
ORDER BY COUNT(First_Name) DESC;

Restituisce il numero di dipendenti che lavorano in ogni posizione. Nota che in QUERY sovrascriviamo l'ordinamento predefinito per mostrare prima le posizioni con il maggior numero di dipendenti.

=QUERY(A1:E14, "select A, E, avg(D) group by A, E")

SELECT
  Department,
  Position,
  AVG(Salary)
FROM data_range
GROUP BY
  Department,
  Position
ORDER BY
  Department,
  Position;

Questo è un esempio di raggruppamento per più colonne.

Restituisce lo stipendio medio per ogni posizione in ogni reparto. La funzione QUERY usa lo stesso ordine di colonne quando ordina i dati come l'ordine specificato durante il raggruppamento.

Combinare i dati di più fogli

Nella maggior parte dei casi si preferisce avere un foglio separato con tutti i dati di origine. In questa sezione verrà descritto come utilizzare la funzione QUERY su un foglio diverso da quello di origine. Verrà inoltre illustrato come combinare diverse fonti di dati in un unico QUERY.

Recuperare i dati da un altro foglio

Google Sheets consente di fare riferimento a un altro foglio quando si sceglie un'origine dati. È possibile farlo aggiungendo il nome del foglio e un punto esclamativo (!) all'intervallo del set di dati. Ad esempio, supponiamo di utilizzare il foglio "Analisi" e che i dati di origine si trovino nel foglio "Dati" dello stesso foglio di calcolo. (Nota: è possibile fare riferimento ai dati di altri fogli di calcolo solo se li si importa nel foglio di calcolo corrente). È possibile specificare l'intervallo in questo modo:

=QUERY(data!A1:E14, “select *”)

Importante: se il foglio contiene spazi o caratteri speciali nel nome, è necessario circondare il nome del foglio con virgolette singole (‘’), come in questo caso:

=QUERY(‘Sheet with a complex name’!A1:E14, “select *”)

Ora sapete come formattare meglio i vostri fogli, separando i dati di origine dai report finali.

Combinazione di più fonti di dati

È anche possibile combinare i dati di più intervalli di dati in un'unica funzione QUERY. I dati vengono combinati in due modi:

  • Verticalmente: I dati dell'intervallo 1 vengono sovrapposti a quelli dell'intervallo 2, aumentando il numero finale di righe.
  • In orizzontale: I dati dell'intervallo 1 vengono affiancati a quelli dell'intervallo 2, aumentando il numero finale di colonne.

La prima opzione funziona come UNION in SQL. I dati di entrambi gli intervalli devono essere simili; quando si fa riferimento a una colonna, vengono visualizzati i dati di entrambi gli intervalli.

Per utilizzare questo metodo di combinazione dei fogli, sostituire l'intervallo di dati nella query con l'elenco degli intervalli, separati da punto e virgola e racchiusi tra le parentesi graffe {}, in questo modo:

=QUERY({sheet1!A1:B1;sheet2!A1:B1}, “select *”)

La seconda opzione funziona come JOIN in SQL. Ogni riga dell'intervallo 1 viene aggiunta a una riga dell'intervallo 2, e la condizione di unione è il numero di riga relativo. In altre parole, la prima riga dell'intervallo 1 viene aggiunta alla prima riga dell'intervallo 2.

Questo metodo ha una sintassi simile al precedente, ma utilizza le virgole al posto dei punti e virgola per separare gli intervalli di dati:

=QUERY({sheet1!A1:B1,sheet2!A1:B1}, “select *”)

Per saperne di più sul funzionamento di UNION e JOIN in SQL, si può consultare il nostro corsoSQL per principianti . Include più di 100 esercizi che vi aiuteranno a imparare e a mettere in pratica la sintassi SQL più importante.

Query SQL per Google Sheets

Ogni esercizio di questo corso SQL interattivo è pensato per aiutarvi a consolidare la vostra comprensione. Man mano che completerete gli esercizi, acquisirete la fiducia necessaria per utilizzare questi comandi nel mondo reale.

Sia che siate agli inizi o che abbiate bisogno di un ripasso, il nostro approccio graduale vi garantisce di imparare al vostro ritmo. Alla fine del corso, avrete una solida base di SQL che vi aprirà nuove opportunità per l'analisi dei dati, la creazione di rapporti e altro ancora.

L'uso delle query SQL rende Google Sheets più potente

L'utilizzo della funzione QUERY di Google Sheets è un ottimo modo per combinare la potenza dell'SQL con l'usabilità di Google Sheets, senza dover imparare molta sintassi aggiuntiva. Con questa funzione è possibile creare rapporti facilmente condivisibili che i colleghi possono utilizzare senza dover abbandonare Google Sheets o comprendere strutture SQL avanzate.

In questo articolo abbiamo analizzato la sintassi della funzione QUERY e le sue somiglianze e differenze rispetto al normale SQL. Come potete vedere, le vostre competenze SQL esistenti possono essere facilmente trasferite alla scrittura di query in Google Sheets.

Volete esplorare altre integrazioni SQL con gli strumenti di Google? Leggete come utilizzare l'SQL con Google Analytics.