Volver a la lista de artículos Artículos
Lectura de 12 minutos

Consultas SQL para Google Sheets

Potencia tus habilidades de análisis de datos utilizando consultas SQL para Google Sheets. Esta completa guía te mostrará cómo utilizar la función QUERY para combinar la potencia de SQL con la accesibilidad de Google Sheets.

¿Quieres que el análisis de datos en Google Sheets sea más rápido y potente? La función QUERY te permite filtrar, ordenar y analizar datos como lo harías en SQL, sin salir de la hoja de cálculo. En este artículo, te explicaremos todo lo que necesitas para empezar a utilizar las consultas SQL en Google Sheets. Vamos allá.

¿Por qué utilizar SQL con Google Sheets?

Google Sheets es un popular servicio de hojas de cálculo online que permite a los usuarios trabajar y colaborar cómodamente desde cualquier lugar con conexión a Internet. Junto con otras hojas de cálculo, Google Sheets es una herramienta popular para el análisis de datos, ya que es fácil de usar y apta para principiantes.

Sin embargo, crear informes complejos con sólo las funciones básicas disponibles en Google Sheets puede resultar difícil. Tareas como el filtrado de datos complejos, la creación de resúmenes de varios niveles o la combinación de grandes conjuntos de datos suelen requerir mucho trabajo manual, lo que hace que el proceso sea lento y propenso a errores.

Aquí es donde entra en juego SQL. Las Hojas de cálculo de Google te permiten escribir consultas de tipo SQL directamente en tus hojas de cálculo, que operan con los datos existentes y te ofrecen respuestas dinámicas como si fueran funciones normales. ¿Te parece interesante? Veamos cómo puedes empezar a utilizar SQL con las Hojas de cálculo de Google.

Uso de la función QUERY de Google Sheets

La función QUERY de las Hojas de cálculo de Google tiene una sintaxis similar a la de SQL, por lo que cualquiera de tus conocimientos actuales se traducirá a la perfección. Analizaremos la sintaxis en detalle dentro de un momento, pero antes, veamos algunos datos de ejemplo que utilizaremos para mostrar la función QUERY:

Consultas SQL para Google Sheets

Se trata de un extracto de una de las bases de datos de nuestro cursoSQL para principiantes , simplificado para adaptarlo a nuestras necesidades actuales.

Sintaxis general

La sintaxis general para utilizar la función QUERY es la siguiente:

=QUERY(data_range, query, [headers])

Los componentes son:

  • data_range es el rango de filas donde se almacenan los datos de origen.
  • query es la propia consulta, que discutiremos en un momento.
  • headers es el número de filas de cabecera en el rango de datos (normalmente 1 ó 0). Es opcional. Se establece automáticamente si no se proporciona, por lo que este parámetro se omite la mayoría de las veces.

Veamos algunos ejemplos de consultas que utilizan el conjunto de datos anterior. Nota: Aquí y en todos los ejemplos siguientes, data_range significa el rango de filas para la función QUERY, es decir, la tabla donde se almacenan los datos para la consulta SQL.

Google Sheets vs. Consultas SQL de muestra

Google Sheets

SQL

Explicación

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

SELECT *
FROM data_range;

Recupera todos los datos en el rango de datos.

=QUERY(data_range, "select *")

SELECT *
FROM data_range;

También recupera todos los datos del rango, pero permite que Google Sheets decida cuántas filas de encabezado hay. De ahora en adelante, evitaremos el argumento de encabezado, ya que Google Sheets puede inferirlo de manera confiable.

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

SELECT
  Department
  First_Name
FROM data_range;

Recupera únicamente los nombres de los departamentos y los nombres de los empleados (almacenados en las columnas A y B).

Filtrado de datos

La sintaxis de la función QUERY para filtrar datos es similar a la sintaxis SQL:

Google Sheets:

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

SQL:

SELECT * FROM data_range WHERE <condition>;

Examinemos algunos ejemplos de cómo se compara la función QUERY con SQL en términos de filtrado de datos:

Google Sheets

SQL

Explicación

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

SELECT *
FROM data_range
WHERE Salary > 3000;

Filtros que utilizan números.
Recupera todos los datos de los empleados que tienen un salario (columna D) mayor a 3000.

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

SELECT *
FROM data_range
WHERE Department = ‘IT’;

Filtros que utilizan texto.
Recupera todos los datos de los empleados que trabajan en el departamento de TI (columna A).

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

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

Filtros que utilizan múltiples condiciones.
Recupera todos los datos de los aprendices (columna E) que tienen un salario de 3000 o más (columna D).

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

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

Filtra por una parte determinada de una cadena.
Recupera todos los datos sobre los empleados cuyo nombre comienza con la letra J.
También hay otras funciones del mismo tipo en Hojas de cálculo de Google; consulte la lista completa a continuación.

La condición WHERE puede filtrar números, texto y mucho más:

  • Los números admiten todos estos operadores: <=, <, >, >=, =, !=, <> . Tanto != como <> significan "no igual" y pueden utilizarse indistintamente.
  • Para filtrar valores de null, debe utilizar is null o is not null. Tenga en cuenta que <column> = null and <column>!= null le dará error.
  • Existen varias funciones para filtrar datos de texto dentro de la función QUERY:
    • starts with filtra por los primeros caracteres de la cadena. starts with ‘A’ coincidirá con todos ellos: "Contabilidad", "Amelia", "A".
    • ends with filtra por los últimos caracteres de la cadena. ends with ‘nt’ coincidirá con todos estos: "management", "Ant", "nt".
    • contains filtra por la subcadena. contains ‘r’ coincidirá con todas estas: "Harry", "Taylor", "r".
    • matches filtra mediante expresiones regulares (regex), es decir, un patrón que describe una cadena.
    • like filtra de forma similar a LIKE en SQL. En Sheets, admite dos comodines: %“_”. like ‘_o%’ coincidirá con todos estos caracteres: "Poole", "ooze", "to".

Para unir varias condiciones en una, puede utilizar las palabras clave and y or:

  • <condition1> and <condition2> será verdadera sólo si ambas son verdaderas.
  • <condition1> or <condition2> será verdadera cuando una de las dos o ambas lo sean.

Para filtrar por la inversa de la condición puede utilizar la palabra clave not: where D > 3000 daría el mismo resultado que where not D <= 3000.

Ordenación de datos

La ordenación en la función QUERY también es similar a la ordenación en SQL. Esta es la sintaxis básica:

Google Sheets:

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

SQL:

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

Veamos cómo se comparan utilizando algunos ejemplos:

Google Sheets

SQL

Explicación

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

SELECT First_Name
FROM data_range
ORDER BY First_Name;

Ordena por una columna; se implica el orden final ASC.

Devuelve todos los nombres de pila de los empleados en orden alfabético.

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

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

Ordena por varias columnas en orden diferente.

Devuelve los departamentos y los nombres de los empleados, ordenados por departamento en orden alfabético y, dentro de cada departamento, por nombre en orden alfabético inverso.

Si no especificas la dirección de ordenación, se utilizará por defecto la ascendente. Esto significa que las cadenas se mostrarán en orden alfabético y los números se mostrarán de menor a mayor. Especificando … order by A asc … explícitamente obtendrá el mismo resultado que evitando especificar el orden: … order by A ….

Si desea especificar diferentes direcciones de ordenación para diferentes columnas, deberá especificar el orden para cada columna. Por ejemplo, este ...

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

... ordenará sólo la columna C en orden descendente. Esta es la forma correcta de ordenar todas las columnas en orden decreciente:

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

Funciones agregadas y agrupación

La función QUERY soporta varias funciones agregadas de SQL. En caso de que no esté familiarizado con ellas, las funciones de agregado toman un grupo de filas como entrada y devuelven un único valor. (Por lo general, los grupos se basan en valores compartidos en una columna determinada; hablaremos de ello más adelante). Si no especificas una columna de agrupación, todo el conjunto de datos será el grupo).

Las funciones de agregación admitidas en QUERY de Google Sheets son:

  • count(col) - Devuelve el número de valores no nulos de la columna col.
  • max(col) - Devuelve el valor mayor de col. Al comparar fechas, las fechas anteriores se tratan como "menores". Las cadenas se comparan alfabéticamente y distinguen entre mayúsculas y minúsculas.
  • min(col) Devuelve el valor más pequeño de col.
  • sum(col) - Devuelve la suma total de los valores numéricos de col.
  • avg(col) - Devuelve la media de los valores numéricos de col.

A continuación se muestran algunos ejemplos de funciones agregadas que se utilizan solas, sin agrupar:

Google Sheets

SQL

Explicación

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

SELECT AVG(Salary)
FROM data_range;

Si se utiliza la función avg() por sí sola, se utiliza todo el rango de datos como entrada.

Devuelve el salario promedio de todos los empleados de la empresa.

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

SELECT COUNT(First_Name)
FROM data_range;

El mismo principio; sin grupos, count() cuenta la cantidad de filas en la columna B para todo el conjunto de datos.

Devuelve la cantidad total de empleados contando sus nombres. Tenga en cuenta que se omiten los valores nulos; para obtener la cantidad adecuada de filas, debemos asegurarnos de que estamos contando una columna que no sea nula.

Para agrupar las filas por el valor de una columna en QUERY, utilizamos la palabra clave group by (igual que en SQL). He aquí una comparación entre las dos sintaxis:

Google Sheets:

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

SQL:

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

La palabra clave group by agrupa las filas en función de los valores compartidos en la(s) columna(s) proporcionada(s), creando una única fila para cada valor distinto. Cuando se utiliza agrupar por, todas las columnas finales deben ser una función agregada o utilizarse en la cláusula agrupar por.

El resultado se ordena automáticamente por las columnas de agrupación, pero esto se puede anular utilizando order by.

A continuación se muestran algunos ejemplos de uso de agrupar por con funciones de agregación:

Google Sheets

SQL

Explicación

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

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

Devuelve el salario promedio entre los empleados de cada departamento.

Tenga en cuenta que el equivalente de SQL incluye la cláusula ORDER BY, pero QUERY no. Al utilizar group by con QUERY, el resultado se ordena automáticamente.

=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;

Returns the number of employees working in each position. Notice that in QUERY we override the default sort order to show the positions with the most employees first.

=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;

Este es un ejemplo de agrupación por múltiples columnas.

Devuelve el salario promedio de cada puesto en cada departamento. La función QUERY utiliza el mismo orden de columnas al ordenar los datos que el orden especificado al agrupar.

Combinar datos de varias hojas

La mayoría de las veces, probablemente le gustaría tener una hoja separada con todos los datos de origen. Esta sección describirá cómo usar la función QUERY en una hoja distinta de los datos fuente. También cubriremos cómo combinar diferentes fuentes de datos en una QUERY.

Recuperación de datos de otra hoja

Google Sheets te permite hacer referencia a una hoja diferente al elegir una fuente de datos. Puedes hacerlo añadiendo el nombre de la hoja y un signo de exclamación (!) al rango de tu conjunto de datos. Por ejemplo, supongamos que estamos utilizando la hoja "análisis" y que nuestros datos de origen se encuentran en la hoja "datos" de la misma hoja de cálculo. (Nota: Puedes hacer referencia a datos de otras hojas de cálculo sólo si los importas a tu hoja de cálculo actual). Podemos especificar el rango así:

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

Importante: Si tu hoja tiene espacios o caracteres especiales en el nombre, debes rodear el nombre de la hoja con comillas simples (‘’), así:

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

Ahora ya sabe cómo formatear mejor sus hojas separando los datos de origen de los informes finales.

Combinar varias fuentes de datos

También puede combinar datos de múltiples rangos de datos en una función QUERY. Hay dos formas de combinar los datos:

  • Verticalmente: Los datos del rango 1 se pondrán encima de los datos del rango 2, aumentando el número final de filas.
  • Horizontalmente: Los datos del rango 1 se pondrán lado a lado con los datos del rango 2, aumentando el número final de columnas.

La primera opción funciona como UNION en SQL. Los datos de ambos rangos deben ser similares; al referenciar una columna, se mostrarán los datos de ambos rangos.

Para utilizar este método de combinación de hojas, sustituya el rango de datos en la consulta por la lista de rangos, separados por punto y coma y encerrados entre llaves {}, de esta forma:

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

La segunda opción funciona como JOIN en SQL. Cada fila del rango 1 se añade a una fila del rango 2, siendo la condición de unión el número de fila relativo. En otras palabras, la primera fila del rango 1 se añade a la primera fila del rango 2.

Este método tiene una sintaxis similar al anterior, pero utiliza comas en lugar de punto y coma para separar los rangos de datos:

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

Puedes aprender más sobre cómo funcionan UNION y JOIN en SQL en nuestro extenso cursoSQL para principiantes . Incluye más de 100 ejercicios que te ayudarán a aprender y practicar la sintaxis SQL más importante.

Consultas SQL para Google Sheets

Cada ejercicio de este curso interactivo de SQL está diseñado para ayudarte a consolidar tus conocimientos. A medida que completes los ejercicios, adquirirás la confianza necesaria para utilizar estos comandos en el mundo real.

Tanto si acaba de empezar como si necesita un repaso, nuestro enfoque paso a paso le garantiza que aprenderá a su propio ritmo. Al final del curso, tendrás una base sólida en SQL que te abrirá oportunidades para el análisis de datos, la creación de informes y mucho más.

El uso de consultas SQL hace que Google Sheets sea más potente

El uso de la función QUERY de Google Sheets es una forma excelente de combinar la potencia de SQL con la facilidad de uso de Google Sheets, sin tener que aprender mucha sintaxis adicional. Con ella, puedes crear informes fáciles de compartir que tus compañeros podrán utilizar sin tener que salir de Google Sheets ni entender estructuras SQL avanzadas.

En este artículo, hemos analizado la sintaxis de la función QUERY y sus similitudes y diferencias con respecto al SQL normal. Como puedes ver, tus conocimientos de SQL pueden transferirse fácilmente a la escritura de consultas en Google Sheets.

¿Quieres explorar más integraciones de SQL con las herramientas de Google? Consulta cómo utilizar SQL con Google Analytics.