Introducción a la función QUERY en Google Sheets

Introducción a QUERY en Google Sheets

Una de las preguntas más frecuentes relacionadas a Google Sheets es como hacer para generar informes o filtros con una fórmula.

La respuesta puede estar en QUERY, una de las funciones más poderosas y versátiles que nos ofrece Google Sheets.

En este artículo hacemos una introducción a la función QUERY en Google Sheets: para qué sirve, como construirla y algunas de sus opciones.

Que es la función QUERY

QUERY es una función exclusiva de Google Sheets que filtra y resume de la manera que queramos, la información de alguna (o varias) de nuestras hojas de cálculo.

Query en español significa consulta, y esta basada en la función QUERY del lenguaje MySQL, el cual se usa para manejar bases de datos.

Por eso, cuando te enfrentes por primera vez a esta función, si nunca has tenido acercamientos con MySQL, se va a sentir raro. Es totalmente distinta a cualquier otra función de Google Sheets o Excel.

Es una función muy poderosa y muy flexible que permite hacer muchas cosas, pero por ahora veremos sus versiones mas básicas.

En la academia de Automatización JuanSGuzmán encontrarás un curso paso a paso del uso de la función QUERY, así como un curso avanzado de la misma.

Ejemplo de la función QUERY

Digamos que tenemos la siguiente fuente de datos:

En resumen, es una serie de registros que cuenta, entre otros, con los siguientes campos:

  • Segmento
  • País
  • Producto
  • Ventas
  • Costo
  • Utilidad
  • Fecha

Ahora quiero poder mostrar en un informe solo algunos de estos datos. Por ejemplo me gustaría ver el país, el producto y las ventas.

Pero adicionalmente podría querer ver estos campos solo para una o dos categorias específicas

Y por ultimo, me gustaría poder ordenarla por ventas de mayor a menor.

Y de pronto me gustaria solo ver los campos con las 5 mayores ventas.

También podría querer ordenarlo por fechas.

Todo esto lo puedo hacer con una sola función: QUERY.

En este primer ejemplo queremos llegar a lo siguiente:

Es decir, vamos a ver solo 4 campos: Segmento, País, Producto y Ventas.

Adicionalmente vamos a filtrar los campos que tengan el segmento “Gobierno” y el país “Alemania”

La función se vería así:

=QUERY(Datos!A1:M701;”SELECT A,B,C,H WHERE A=’Gobierno’ AND B=’Alemania'”;1)

Pero no te asustes, ya veremos esta función en detalle.

Función QUERY básica

Empecemos por la forma más básica de QUERY. Sería así:

=QUERY(“Datos!A1:M701;”SELECT *”;1)

Entonces, la función tiene tres componentes, así:

=QUERY(Fuente de datos, Consulta, Encabezados)

Veamos las tres partes en detalle

Fuente de datos

La fuente de datos es nuestra tabla de origen, la cual puede estar en la misma hoja, en otra hoja e inclusive en otro archivo. Hasta podría “construirla” con varias fuentes con la ayuda de la función arreglo {}, pero eso lo dejamos para otro día.

Puede ser un rango directo como A1:L20, un rango infinito como A1:L, un intervalo con nombre o una fórmula que nos arroje un rango.

Encabezados

Voy en desorden, porque dejo la mas importante de ultima.

Encabezados simplemente me dice si traigo o no encabezados.

Normalmente es 0 o 1, donde 0 es que no traiga los encabezados de la tabla de origen, y 1 es que traiga el encabezado.

Esto dependerá de cada caso específico. En nuestro caso, como la fuente de datos tiene encabezados y además queremos traerlo, podríamos “1”.

También la podríamos dejar vacía.

Consulta

Este es el corazón de la función QUERY y es la parte más complicada de entender, pero la que, después de trabajarla unas cuantas veces, dominaremos y nos dará el poder y la flexibilidad de esta función. Por eso dediquémosle una sección entera:

Consultas en la función QUERY

Consulta general

Si vemos el ejemplo anterior, la consulta (que siempre va en comillas) es:

“SELECT *”, que me arroja:

Vamos a ir “traduciendo” este lenguaje SQL poco a poco.

“SELECT *” quiere decir “Seleccione todo”.

Es la forma más general de QUERY, y lo que hace básicamente es copiar la fuente de origen. Crea un duplicado exacto.

Personalmente, siempre que construyo una función QUERY empiezo con “SELECT *” y poco a poco voy agregando condiciones adicionales.

También podemos dejar la consulta vacía, y sería el equivalente a “SELECT *”.

Así quedaría nuestra función:

=QUERY(Datos!A1:M700)

Filtrando columnas

Lo primero que podemos hacer es “decirle” a QUERY que solo nos muestre ciertas columnas

En nuestro ejemplo podemos entonces mejorar nuestra condición de la siguiente manera:

“SELECT A,B,F”

Entonces, sin ningún comando adicional, le estamos diciendo “Solo muestre las columnas A, B y F”.

Tengan en cuenta que el orden en que escriba las columnas es el orden en que las va a mostrar.

Esto me trae otra ventaja de QUERY y es que puedo reordenar mis columnas como quiera. Por ejemplo podría poner:

“SELECT F,A,D,B”

Lo que si no me permite es repetir columnas

Una Condición

Después de filtrar las columnas, puedo dar mi siguiente instrucción y es filtrar por alguna o varias condiciones de las filas.

Es importante observar que la columna de la condición no tiene que involucrar necesariamente una de las columnas que se muestre.

Por ahora no incluyamos las columnas, y solo mostremos todas las columnas, concentrándonos en las condiciones, volviendo a nuestro leal asterisco “*”.

Nuestra primera condición va a ser un país.

Quiero ver todos los campos cuyo país sea Canadá. Nuestro primer ejemplo entonces va a ser:

“SELECT * WHERE B=’Canadá'”

Nota: Si vas a mostrar todas las columnas, puedes omitir el comando SELECT. Quedaría así la consulta: “WHERE B=’Canadá”

Listemos entonces ciertas características de las condiciones

  • Para estas condiciones siempre vamos a usar el comando “WHERE”.
  • Vamos a proporcionar la columna donde queremos buscar la condición.
  • Después vamos con un operador de comparación, en este caso “=”
  • Por último damos la condición, la cual debe estar entre comillas sencillas.

Así como pusimos B=’Canadá’ podríamos poner C=’Carretera’ o A=’Gobierno’

Varias condiciones

Aquí empezamos a ver el gran potencial de QUERY, y es que puedo poner todas las condiciones que quiera.

Digamos que ahora quiero ver los registros del país “Alemania” y del producto “Montana”.

A la construcción actual tengo que agregarle el comando “AND” que me junta todas las condiciones. El ejemplo entonces sería:

“SELECT * WHERE B=’Alemania’ AND C=’Montana'”

Por último combinemos los filtros de columnas y de filas en una sola. Sería algo así:

=QUERY(Datos!A1:M701;”SELECT A,B,C,H WHERE B=’Alemania’ AND C=’Montana'”;1)

En la academia de Automatización JuanSGuzmán encontrarás un curso paso a paso del uso de la función QUERY, así como un curso avanzado de la misma.

Ordenar

Para terminar esta introducción de Query, donde vemos sus funcionalidades como una especie de “filtro dinámico”, vamos a ordenar nuestros datos, con la ayuda del comando ORDER BY.

A diferencia de WHERE, ORDER BY tiene dos argumentos: la columna que voy a ordenar y si va a ser de menor a mayor (ASC) o de mayor a menor (DESC)

Este comando siempre debe ir después de WHERE. En otras palabras: primero filtro y después ordeno.

Aunque puede darse el caso que no filtre y solo ordene.

En nuestro ejemplo, una vez filtrado por país y producto, ahora voy a ordenar por segmento de mayor a menor:

=QUERY(Datos!A1:M;"SELECT * WHERE B='Alemania' AND C='Montana' ORDER BY A DESC";1)

Limitar

Una última cosa que puedo hacer es limitar la cantidad de datos que muestre mi Query. Puedo por ejemplo mostrar solo 5, 10 o 26 resultados. Lo que yo quiera.

Para esto voy a usar el comando LIMIT, despues de WHERE y de ORDER BY.

Otra vez, podría no usar WHERE, ni ORDER BY y simplemente mostrar mi base maestra, pero solo los primeros 10 items, con el comando

LIMIT 10

Entonces si en nuestro ejemplo quisieramos filtar por pais y producto, ordenando por segmento y mostrando los primeros 15 resultados, nuestro código se vería así:

=QUERY(Datos!A1:M;"SELECT * WHERE B='Alemania' AND C='Montana' ORDER BY A DESC LIMIT 15";1)

Siguientes pasos

Esto es solo el abrebocas a lo que puede hacer QUERY.

Entre las cosas que nos quedan por explorar estan:

  • Dar nuevos nombres a las columnas
  • Campos calculados
  • Agrupar por filas
  • Agrupar por columnas
  • No mostrar ciertas filas
  • Trabajar con fechas
  • Hacer “Subqueries”
  • Hacer queries dinámicas, con filtros del usuario.

Todo esto lo iremos viendo en artículos posteriores.

Conclusión

Hasta ahora estamos rozando la superficie de lo que podemos hacer con la función QUERY, pero sinceramente creo que es una función a la que debemos ir acercándonos poco a poco hasta dominarla.

Por ahora te invito a practicar con alguna de tus bases, para así, ir familiarizándote con esta magnífica función.

149 comentarios en “Introducción a la función QUERY en Google Sheets”

  1. Hola, primero felicitarte por tu contenido. Te quería pedir ayuda con el siguiente caso

    Tengo el siguiente arreglo de datos (Texto sin formato)

    Fecha
    9999-12-31 00:00:00.000
    9999-12-31 00:00:00.000
    2022-04-22 23:00:45.993
    9999-12-31 00:00:00.000

    Lo que quiero de salida es este arreglo

    Fecha
    31-12-9999
    31-12-9999
    22-04-2022
    31-12-9999

    La formula que estoy intentando depurar es esta

    Query(Arreglo;”Select Col1 format Col1 ‘”&TEXTO(IZQUIERDA(Col1;10);”DD-MM-YYYY”)&”‘”;0)

    Sin embargo no logro resolverlo, siempre me entrega el arreglo original

    Muchas gracias de antemano

  2. Buenas como podría hacer para que al responder preguntas en el formulario no se me borrasen la formula automáticamente en la hotra hoja. se que se hace con querty como en el ejemplo que adjunto por que me funciona en otras lineas pero en esta linea no. gracias
    =QUERY(BUSCARH(“POLO*”;’Respuestas de formulario 10′!E2:N2;1;0))

  3. buenas, mi duda es la siguiente:
    como podría hacer para coger los datos de las respuestas de un formulario con Query pero solo de las celdas que contienen texto y pasarlas a otra hoja, es decir, si una persona compra 3 pantalones de la talla xl que me lea toda la columna y me coja solo la casilla que esta rellena de la talla xl y me la pegue en otra talla en la columna de categoría de pantalones por ejemplo.

  4. Hola un gusto poder saludarte, tengo esta formula

    =QUERY(Estado!A:V; “SELECT * WHERE B is not null ORDER BY G ASC”;)

    sucede de que es muy importante los colores que contiene cada celda que busco traer con la formula de Query,

    existe alguna manera para poder traer junto con la informacion el color de las celdas?

    1. Hola!
      Desafortunadamente QUERY solo trae textos
      Una solución que se me ocurre es que crees con código una columna auxiliar que traiga los colores hexadecimales en una columna
      Y despues en tu query puede haber otro código que coloree dependiendo de esa columna
      Saludos!

  5. hola, como estas?
    estoy usando esta formula y me da error
    =QUERY(HISTORICO!A3:I1000;”SELECT * WHERE B=‘EN CARTERA‘”;1)
    me podras ayudar? gracias!

  6. Buenas Juan, ¿Cómo estás?

    Tengo problema con los filtros/condiciones en los QUERYS cuando son ficticios y debo usar “Cols” en vez del nombre de la columna (ejemplo D).

    =QUERY({‘2021′!A2:AD;’2022′!A2:AD;’2023′!A2:AD;’MES ACTUAL’!A2:AD};”SELECT Col3, Col4, Col6, Col13, SUM(Col16) GROUP BY Col3″;1)

    Ese QUERY me anda perfecto hasta antes de SUM. Pero cuando agrego SUM y GROUP BY me arroja un error.

    No se puede analizar la cadena de la consulta para En la función QUERY, el parámetro 2: ADD_COL_TO_GROUP_BY_OR_AGG: Col4

    Sabrías que puede ser ?

    Desde ya muchas gracias por todo el material que brindas en YT. Éxitos !!

    1. Hola!

      En el momento en que pones sum y group by ya le estas diciendo que vas a “resumir”.

      Entonces estas resumiendo por Col3, pero te quedan otras tres columnas que “quedan volando”: la 4 la 6 y la 13

      Tienes 2 opciones:
      Opción 1: Quitas la 4 la 6 y la 13
      las agregas en el group by asi
      GROUP BY Col3, Col4, Col6, Col13

      No se si te va a dar el resultado esperado pero ya no te va a dar error

      Saludos!

  7. Buenas noches.

    Necesito hacer una consulta con la función Query en Google Sheets sobre dos listas de datos en la misma hoja.
    La consulta debe devolver los datos de una de las listas que no están en la otra lista.

  8. QUERY(HOJA1!A:B;“SELECT B WHERE B IS NOT NULL“)
    esta query me funciona

    QUERY({HOJA1!A:B;HOJA2!A:B};“SELECT B WHERE B IS NOT NULL“)
    me da un error

    Quizás es una tonteria… pero no consigo ver el error.
    Gracias por adelante y por toda la información publicada!

  9. Geniales tutoriales.
    Hasta ahora usaba tablas dinámicas… pero el QUERY es genial… y mas si has programado con SQL.

    No sé si ya has publicado como hacer una query con varias fuentes con la ayuda de la función arreglo {}.

    Yo no consigo ver donde tengo el problema.

  10. Hola Juan, muchas gracias por todo el conocimiento que impartes.

    Tengo una duda, estoy bajando una base de datos por meses, pero al traerlos me los ordena por orden alfabético y no por mes, ¿cómo puedo organizarlos por mes?, disculpen la molestia.

    El código es:

    =TRANSPONER(QUERY(A:K,»SELECT J, AVG(B) WHERE B> 0 GROUP BY J ORDER BY J ASC Label AVG(B) ‘QA score’ «,-1))

    J: Son los meses y AVG(B) son los datos

    El WHERE B solo lo uso para quitar un espacio en blanco y no agregar el que dice is not null.

    Saludos

  11. Hola una consulta si quiero hacer que en el query una columna no sea igual a un solo valor, es decir que busque en un listado y me entregue las filas de los datos que extraigo, donde una columna coincida con varios valores de otra hoja de datos.
    Por ejemplo tengo una base de datos de muchos clientes y aparte tengo una hoja con el id de algunos clientes , entonces quiero que me muestre todas las filas donde la columna 3 coincida con los id de los clientes de otra hoja.

    Query (Datos 1; “WHERE Col3='”&lista clientes! A2:B&”‘”)

    1. Hola

      En SQL eso se hace con la claúsula IN, pero no existe en SQL

      Lo puedes hacer con esta clausula “WHERE A matches ‘”&A1&”&”|”&A2&”‘”

      Algo asi. puedes jugar con la funcion TEXTJOIN para usar toda una lists

      Saludos!

  12. Buenas!! Se puede filtrar sólo los números positivos de una columna? Tengo columnas con positivos y negativos, no doy con la expresión para tener solo las positivas en un reporte. Gracias!!

  13. Hola Juan
    Magnifico tus tutoriales de como utilzar QUERY. Tengo un problema al hacer una consulta y es que me cambia el formato de numero a texto de toda la columna, situacion que imposibilita hacer operaciones matematicas.

  14. Hola Juan, muchas gracias por el texto, muy completo. Tengo una duda, es posible que pueda filtrar de una sola columna dos condiciones. Ejemplo, en la columna Pais quiero traer los registros de Argentina y Brasil.

  15. Hola Juan! Primero que nada MUCHÍSIMAS GRACIAS por compartir tu conocimiento. Super claro y didáctico, fue de gran utilidad para mi en serio.

    Quería hacerte una consulta a ver si podrías ayudarme…

    Estoy consolidando 2 bases de datos DISTINTAS (tienen diferentes columnas por eso no se pueden juntar!). Las uní con un arreglo mediante \ ( uniendo por columnas)

    El problema es que yo en ambas bases de datos utilizo la función QUERY ya que estoy agrupando los datos por semana, y haciendo cálculos de SUMAS por semana.

    Cuando las uno, sólamente puedo unirlas si repito la columna “semana” en cada arreglo.
    Es decir, se imprime : semana |ventas A| ventas B| semana | registros

    Hay alguna forma de consolidar los datos mediante el criterio (semana) y que aparezca una sola vez? o la solución sería ocultar la columna ??

    Aguardo respuesta ! Muchas gracias 🙂

      1. Hola Juan ! La fórmula “WHERE A=’”&B2&”‘” me funciona cuando es un texto lo que se encuentra en la celda B2, pero cuando es un NUMERO no me funciona, que debo modificar ?

  16. Hola jsguzmanb, buen articulo. Recién estoy descubriendo QUERY.
    mi pregunta es la siguiente:

    Que diferencia o ventaja hay entre usar QUERY en vez de una TABLA DINAMICA ?

    1. Hola! Es mucho más flexible el QUERY, pero es mucho más fácil de usar la tabla dinámica. En el QUERY puedes controlar el formato y los encabezados directamente desde la fórmula y puedes hacer unos filtros muy avanzados con WHERE
      Saludos!

  17. Hola, tengo una duda. Le he dado vueltas y no me sale. Para traer celdas “no vacías” sería usar Where celda IS NOT NULL. Si quiero traer las celdas vacías, cómo sería? probé con IS NULL y no me funciona

  18. =Query({Income!A:E;’Fixed expenses’!A:E;’Other expenses’!A:E}, “Select * Where NOT Col1 is Null ORDER by Col1 ASC”, 0)
    me marca un error, no se que sea?

  19. Muy buenos comentarios

    Tengo una consulta, donde tengo una columna que tiene datos numericos y texto, aplique el formato texto sin formato a todas las columnas de la tabla origen, pero en la fuente trae algunas y otras no, que podria ser?

  20. Hola. Antes que nada, la explicación es súper clara en un tema que no es simple. Te lo agradezco muchísimo.
    Quiero consultarte algo, explicaste que se pueden usar referencias a una celda para las condiciones, pero necesito usar una para el LIMIT. Lo hago de la siguiente forma y no lo toma. Esto es para que la cantidad de registros sea variable, quizás con una celda que tenga una validación de datos con la cantidad.

    =QUERY(Datos!A1:F;”SELECT A,B,C,F WHERE B contains ‘”&LEFT(B43;FIND(” “;B43)-1)&”‘ AND F>4 ORDER BY C DESC LIMIT ‘”&F40&”‘”;1)

    Espero puedas ayudarme, un saludo cordial.

  21. Hola, muy buena la explicación. Ahora bien, se puede crear una función aparte, la cual me genere una salida tipo texto y anexarla en Query.

    Por ejemplo:

    Función: BuscarV(a2; g:h; 2; 0) (esto me devuelve la letra de referencia “F”

    Luego concateno:

    Concat: “select ” & Función

    Y la anexaría en Query como

    Query(“datos!a2:b”; concat)

    Aquí me genera un error

  22. Hola Juan! Lo primero muchas gracias por todo el contenido que publicas, ultimamente utilizo mucho google sheets en el trabajo y me viene genial! Te quería hacer una consulta….
    Estoy utilizando la función Query para traerme los datos de otro fichero, con la condición de que una celda coincide con el número de pedido que yo le doy. Un ejemplo:

    Query(Hoja y Rango; “select * where Col1 is not null and Col3 contains ‘1183’”;1)

    Con ese ejemplo funciona perfectamente. El problema es que los números de pedido que utilizo para buscar, ahora han cambiado al formato LCXXXX (p.e LC1041). Y con este formato la query no encuentra esa fila, y no trae ningún dato de vuelta.

    He probado a cambiar el contains por Col3 = LC1041, pensando que puede tomar el dato como texto, al tener letras, pero tampoco funciona.

    ¿Alguna idea de lo que puede estar pasando?

    Gracias y saludos!

  23. Mónica González

    Hola Juan, Muchas gracias por tomar el tiempo para contestar todas las dudas y por generar estos contenidos. Quisiera preguntarte si existe algún un límite en la cantidad de celdas que puede extraer Query cuando está una función Importrange anidada, porque tengo una base de datos de la cual intento extraer información hacia otra hoja de cálculo. La información que necesito extraer está en dos de las columnas del archivo origen siempre y cuando cumplan con las condiciones que se marcan en la fórmula, sin embargo sólo obtengo como resultado la información de la columna 1 y no de la columna 11.

    El rango completo de búsqueda es de 11 columnas y 10114 filas (un total de 111254 celdas y contando…esta es la fórmula:

    =QUERY(importrange(“1-6Kz2YTqxrSgBNLd3Sm4LP0K87kqIYNl5Y-CKwwA”,”Students!B:L”),”Select Col1,Col11 Where (Col5 = ‘”&O5&”‘) and (Col3 = ‘”&O7&”‘) and (Col4 = ‘”&R5&”‘) and (Col10 = ‘ACTIVE’) order by Col1 asc “,1)

    Muchas gracias por la atención.

  24. Buenos días,
    Estoy haciendo una tabla aplicándole la función QUERY, quiero que solo me pase los datos que incluyen la palabra verdadero pero no me ha querido funcionar pues solo me pasa los encabezados y no se cual es el error.
    Tengo la formula así:

    =QUERY(VER!A1:R26406,”SELECT A, B, C, D, R WHERE R=’VERDADERO'”)

    O en su defecto, como se pondría la formula para que solo pase los datos cuando tenga información en una columna, por ejemplo una fecha.

    Muchas gracias

    1. Hola Daniel

      El problema se puede deber a que tienes el VERDADERO de Sheets, no un texto “VERDADERO”. puedes intentar con R=true

      Para el segundo tema, si decimos que tu columna A es la fecha, puedes usar WHERE A IS NOT NULL

      Me cuentas!

      Un gran saludo!

  25. Hola, tengo un problema, es un listado con número de jugadores y fechas, tengo el SELECT WHERE con las fechas funcionando, pero también quiero filtrar por jugadores, lo que hace que colapse y deje de funcionar tanto las fechas como la busqueda por número de jugador.

    B3: Filtro número jugador
    B4: Filtro fecha inicio
    B5: Filtro fecha fin

    =QUERY({BD!A:J},CONCATENAR(“SELECT * WHERE Col2= ‘2’ AND Col4 >= date ‘” &TEXTO(B4,”yyy-mm-dd”)& “‘ AND Col4 <= date '"&(TEXTO(B5,"yyyy-mm-dd")&"'")))

  26. Excelente explicación. Me ha servido para construir mi query. Sólo tengo un problema. Tengo dos columnas que son de texto y fechas cada una. La query me devulve la segunda bien; la primera cuando es texto me sale en blanco (las fechas bien). ¿Sabes a qué puede deberse? ¡Gracias!

  27. Hola, Juan: ¡Excelente explicación! Me ha ayudado mucho a construir mi query pero me da un pequeño problema.

    =query(GLOBAL!A4:AE;”select B,C,D,AA,AB,AC,F,I,G,H,A,E”;0)

    me devuelve todo bien excepto que la columna AA combina texto y fechas, no devolviéndome el texto (lo pone en blanco). La columna AB también tiene texto y fechas y no ocurre así: me devuelve el texto correspondiente o la fecha. ¿Sabes a qué puede deberse? ¡Gracias!

    1. Hola Octavio

      El tema con QUERY es que “adivina” que tipo de datos tiene cada celda

      Por eso lo aconsejable es tratar de no mezclar tipos de datos en cada columna, porque si no, estamos a la merced de lo que crea QUERY. Mi sugerencia es que en la base de origen le apliques un formato de texto a todo

      Me cuentas.

      Saludos!

      1. Muchas gracias por la info. El problema es que es una query que “chupa” de otra hoja que también es una query. He cambiado el formato en esa primigenia, pero sigue apareciendo igual. El documento original sí que no puedo modificarlo porque lo usan muchas personas.

        No te preocupes. No queda tan mal 🙂

        ¡Un saludo!

        PD: Disculpa que duplicara el comentario. No me aparecía.

  28. Y si quiero que sólo traiga las celdas con texto? Es decir, tengo una columna en la que hay muchos huecos y alguna celda que sí tiene contenido. Si quiero que sólo traiga celdas que tengan contenido, ¿qué tengo que añadirle a la fórmula?

  29. Carlos Andrés Dueñas

    Hola Juan buenos días.

    Excelente explicación!. Quería preguntarte si es posible realizar la función Query para textos que no tengan una coincidencia exacta. Es decir, filtrar todas las lineas que contengan una palabra en común en una columna determinada.

    Te agradezco mucho si me puedes ayudar

    ¡Saludos!

  30. CARLOS ANDRÉS DUEÑAS

    Hola Juan,

    Excelente explicación. Una pregunta, es posible realizar la función Query sin tener una coincidencia exacta. Es decir, filtrar todos las filas que contengan una palabra en común.

    Gracias!

  31. Hola! me sale un error cuando concateno 2 query para unir los datos. El error es el siguiente:
    “No se puede analizar la cadena de la consulta para En la función QUERY, el parámetro 2: NO_COLUMN: Col1″

    a qué se debe?

    esta es mi fórmula:

    ={QUERY(FB!A2:W;”SELECT Col1,Col2,Col3,Col5,Col8,Col9,Col15,Col16,Col17,Col18,Col19,Col20,Col21,Col22,Col23″);QUERY(YT!A2:W;”SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18,Col19”)}

    ojalá me puedas ayudar

    1. Hola!

      La denominación Col1,Col2, etc solo te va a funcionar cuando la fuente de datos sea un arreglo o el resultado de una función.

      Lo solucionas envolviendo los rangos en arreglos asi:

      ={QUERY({FB!A2:W};»SELECT Col1,Col2,Col3,Col5,Col8,Col9,Col15,Col16,Col17,Col18,Col19,Col20,Col21,Col22,Col23″);QUERY({YT!A2:W};»SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18,Col19»)}

      Me cuentas

      Saludos!

  32. ¡Buenos días!
    Tengo una consulta que hacerte…Siguiendo tu explicación y toda la ayuda de los comentarios….sigo sin poder tener una expresión correcta.
    Mi intención es que mediante una query me aparezca una suma de un importe en un rango de fechas concreto, esta es la expresión que tengo actualmente:

    QUERY(QUERY((importrange(“tabla datos”;”Facturación Encargos 3b!A:N”);”SELECT A, SUM N GROUP BY A”;1);”WHERE col14>= date ‘2021-09-01’AND col14= date ‘2021-09-01’ AND A<= date '2021-09-16'";1)

    *Fuente de datos: Tabla datos (otra hoja de cálculo diferente)
    *A=CAMPO FECHA
    *N= CAMPO IMPORTE (col14)

    Lo que quiero es que me sume el importe entre el 01/09/2021 y el 16/09/2021, y me dé un valor único.

    ¿Que tengo que corregir o hacer?

  33. Hola Juan,

    Primero quiero agradecer todo tu contenido compartido en la web y youtube me salvo infinidad de veces y eso no tiene precio. ¡Gracias!

    Quería realizarte una consulta:
    Tengo una query realizada que me ocupa en la hoja de la columna A a la G

    =query(‘Base sin datos’!A5:H;”SELECT A,B,C,D,E,F,G WHERE H=’Norte'”;1)

    Luego las columna H tiene un desplegable que se completa en base a un dato de la query, pero tengo un problema. Detecte que si ordeno los datos de la hoja “Base sin datos” (donde tomo la información para la query) se ordena la información de la query pero no se modifica el orden de la columna H.

    ¿por qué me sucede este?

    Desde ya te agradezco tu ayuda.
    Saludos,
    Yesica.

  34. Hola que tal, al hacer un query a una columna con datos numericos y texto, cuando se hace la consulta unicamente me trae los datos que son numericos y los string me los manda como si estuvieran vacios, que puede ser?

  35. Hola Juan! Gracias por todo el contenido, me está ayudando mucho.

    Estoy utilizando la función query + importrange y funciona perfectamente, pero estoy teniendo problemas a la hora de meter una referencia a una celda dentro del “where”, para que la condición sea dinámica.

    Así funciona sin problemas:

    =query(importrange(“codigoID de la hoja origen”;”Puntos de Venta!A:Z”);”select * where Col1 is not null and Col7=’NombreComercial'”;1)

    Y al poner la referencia me da error y no veo por qué:

    =query(importrange(“codigoID de la hoja origen”;”Puntos de Venta!A:Z”);”select * where Col1 is not null and Col7='”&Hoja pedido!M2&”‘”;1)

    Alguna idea? Gracias!

  36. Hola!!

    Estoy usando la formula query pero quiero poner un condicional en porcentaje pero me sale error. Lo que hago es los siguiente: =query(‘Payment Support’!A1:Q;”select A,B,C,D,E,F,G,J,K,Q WHERE I=100%”;1)

    ¿Me puedes ayudar?

  37. Jorge Rodríguez

    Quiero sumar las ventas agrupadas por modelos de ropa y filtrar a todas las que dan como resultado 1 durante lo que va del año.

  38. buenos días para texto debería ser así =QUERY(‘Biología’!C4:D18,»SELECT D WHERE C ='”&C5&”‘,0) , van primero comillas simples , luego comillas dobles. Espero haberte ayudado saludos

  39. Marcelo De Paula

    Muchas gracias por el contenido. Aprovecho para hacer la siguiente consulta:
    =QUERY(‘Biología’!C4:D18,”SELECT D WHERE C =”&C5&””,0)
    Al realizar esta consulta siendo C5 un texto, me devuelve error, si sustituyo C5 por un nombre de los incluidos en la columna C entonces si funciona correcto pero no al usar la celda que corresponde.
    Agradezco cualquier ayuda.

    1. buenos días para texto debería ser así =QUERY(‘Biología’!C4:D18,»SELECT D WHERE C ='”&C5&”‘,0) , van primero comillas simples , luego comillas dobles. Espero haberte ayudado saludos

  40. ufff jsguzmanb, que pagina, wauuu para mi despues muchos años, haberla encontrado maximo, desde que estaba app script, con deseos de hacer, cosas, la mejora de grabar macro, pero por falta de idioma ingles no logre sacarle proveecho, para beneficio, mio, hoy con tu pagina he logrado lo que habia deseado.

    mi objetivo es consolidar en una sola hoja, el contenido de otros archivos en donde su estructura es igual.
    lo hice con importrange pero deseo hacerlo desde appscript y a la vez poder parametrizar que registros traer, asi como funciona el query.

    la idea mia es tener una opcion de menu (ya lo tengo) en donde este importar datos., y llame mi fucion appscript, pueda copiar datos de un libro a otro, pero usando filtros por registro.

    aspiro haber expuesto bien la duda
    Mil Gracias.

  41. Hola , no logro que el query se desplegue si cumple alguna de las dos condiciones

    =QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1L0atzUxQB9yDLns-Pogv6KlhHmHLqOk9KluJwd_eGAY/edit#gid=1237889533″,”historial listas!A:F”),”SELECT * WHERE Col1=”&B1&” OR Col2 CONTAINS'”&D1&”‘”,0)

    Col1 = numero
    Col2=texto
    gracias

  42. buenas no logro que el query me cumpla una de las dos condiciones adjunto el código utilizado

    =QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1L0atzUxQB9yDLns-Pogv6KlhHmHLqOk9KluJwd_eGAY/edit#gid=1237889533″,”historial listas!A:F”),”SELECT * WHERE Col1 =”&B1&” OR Col2 Contains ‘”&D1&”‘”,0)

    B1 ES NÚMERO (col1)
    D1 ES TEXTO (Col2)

  43. Hola, me arroja el error #N/A , porque no hay datos en la columna a consultar, como puedo lograr que me muestre los otros datos ?

    =QUERY(IMPORTRANGE(“1QMt8gvmdgR-iLPa6uzCEzD0tHTYUnJmJWqRnHGyikVM”,”Respuestas de formulario 1!A:EG”),”select Col82, Col48, Col3, Col10, Col6, Col20, Col27, Col31 WHERE Col82 = ‘7° básico'”,0)

  44. Hola Pablo.

    Excelente formula para usar en mis análisis
    Una duda, como podría traer información de una misma columna como condición.

    Por ejemplo quiero que me traiga de la columna B , cuando son los paises de España e Italia

    Mil gracias de antemano

  45. Hola,

    Tengo datos de la A hasta la CX, cómo puedo indicarle que me traiga todas esas columnas en lugar de poner una por una.
    Algo así como SELECT A,C, D HASTA CX.

    Además, Quiero que solo traiga datos que en las columnas D hasta la CX contengan “Pendiente”.
    Sería algo como WHERE D HASTA CD = ‘Pendiente’

    Gracias,

    1. Hola Pablo

      Desafortunadamente no hay manera de hacerlo como lo pides. Usando en vez de las letras la notacion Col1 nos podemos inventar un ciclo que haga Col1,Col2,Col3…etc.

      Es la unica forma

      Un gran saludo!

  46. Hola, Al traer esta información de mi libro todo corre bien pero me da una notificación.
    La cual dice que necesito usar un navegador web de escritorio para conectar está hoja.
    Habrá alguna solución ya que solo mi Smartphone tengo para trabajar.
    Saludos…
    =QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1mdVSTKEsSSj7-xm4xz_orsy_oxxtPG6PR60yL3CRjsw/edit?usp=drivesdk”,”Sheet1!A1:A10″))

  47. Hola,

    Tengo una duda: estoy utilizando QUERY para unir dos tablas con los mismos campos, pero hay una columna donde los datos mayormente son numericos, pero de vez en cuando hay datos tipo texto pero el query no me trae dicha información (me deja la celda en blanco).

    Como podría solucionarlo?

    Formula:
    =IFERROR(QUERY({
    IMPORTRANGE(“DatosA!$A1:$AQ”);
    IMPORTRANGE(“DatosB!$A2:$AQ”)
    },
    “select * where Col1”order by Col2 asc”),””)

    Gracias de antemano.

  48. Hola,

    Tengo una duda: estoy utilizando QUERY para unir dos tablas con los mismos campos, pero hay una columna donde los datos mayormente son numericos, pero de vez en cuando hay datos tipo texto pero el query no me trae dicha información (me deja la celda en blanco).

    Como podría solucionarlo?

    Formula:
    =IFERROR(QUERY({
    IMPORTRANGE(“Elysa Coordinador!$A1:$AQ”);
    IMPORTRANGE(“Lissette Coordinador!$A2:$AQ”)
    },
    “select * where Col1”order by Col2 asc”),””)

    Gracias de antemano.

  49. HOLA
    Excelente aporte el que nos compartes.
    tengo una duda:
    como puedo hacer el uso del HAVING en el query.
    No se porque no me permite usarlo en esta funcion.

    1. Hola
      Encontré la solución usando el recurso de subquerys.
      De esta manera puedo usar en el WHERE del QUERY final, lo que requiero del HAVING del QUERY principal.

      =QUERY(DATOS!A:D;”Select A,SUM(D) group by A) ‘este es el QUERY PRINCIPAL DEL QUE NECESITO EL HAVING Sum(D)9″)

      Asi obtengo el resultado que necesitaba
      Comparto esto porque la verdad le busque un buen rato la manera. y puede ayudarle a alguno.

  50. Independientemente de si es posible resolverlo con QUERY, que estaría bien saberlo, he averiguado que puede hacerse muy fácilmente con la función VLOOKUP:

    =VLOOKUP(A1,Tabla1!$A$1:$C,1,false)

    Gracias de todos modos por difundir conocimiento. Lo dejo aquí para que no te moleste otro más novato que yo si busca lo mismo 😉

  51. Muchas gracias Juan. Está muy bien explicado para dar los primeros pasos, pero necesito ir más allá. Necesito hacer en la consulta una comparación entre las dos tablas, la de origen de datos y la actual. ¿Cómo referencio en la condición WHERE la celda de la tabla actual?

    Concretamente tengo una Tabla1 con A:nombre B:Apellidos C:DNI y una Tabla2 con A:DNI y B:Consulta para obtener el nombre de la Tabla1

    Me funciona con:
    =QUERY(Tabla1!A1:C;”SELECT A WHERE C = ‘12345678Z'”;0)

    Pero no sé cómo hacer el valor dinámico. No funciona:
    =QUERY(Tabla1!A1:C;”SELECT A WHERE C = Tabla2!B1″;0)

    Mil gracias.

      1. Buenas Juan, y en caso de querer comparar una de las condiciones con una celda de la misma pestaña? He intentado como cometabas aqui arriba pero no he conseguido. Quiero pasar de:

        =QUERY(‘Pestaña 1’!$B$2:$P$300; “select D where C LIKE “”%1%”” AND B=’APELLIDO, Nombre'”;0)

        a

        =QUERY(‘Pestaña 1’!$B$2:$P$300; “select D where C LIKE “”%1%”” AND B='”&$B$3″‘”;0)

        He probado distintas opciones pero no consigo acertar. Un saludo,

        Jonathan

  52. Muchas gracias por la información, tengo una consulta si deseo filtrar un valor que sea igual al valor que contiene un celda en especifica ¿Cómo seria la formula?

  53. Buenas tardes Juan, quisiera saber porque sucede este error con QUERY “La consulta se ha completado con un resultado vacío” Si estoy utilizando bien la formula?

    1. Hola Yiseth, seguramente la formula esta correcta, pero no estás poniendo las condiciones para que te traigan algo que necesitas. Debes ver que efectivamente hayan valores que cumplan las condiciones que le estas poniendo

      Un gran saludo!

      1. Excelente información. Me pasa lo mismo yo utilizo porcentajes y puse los mismos formatos en todas las columnas será el tipo de comillas?

  54. Buenas noches, excelente posteo. Consulta, me gustaría traer los datos de una columna con query pero solo donde los valores de la misma sean distintos a un texto.

    =QUERY(‘CORFO FTTH’!A:Z;”SELECT A,B,D,E,F,G,H,I,J,L,N,T,V WHERE F =’FT-FT_E’ OR F =’FT-FT_E-R’ AND I’EN CANCELACION'”;1)

    Este ultimo parametro de la columna I no lo estaría interpretando la columna.

    Muchas gracias

  55. Muchas gracias por la información, excelente página. Pregunta: una de las columnas a consultar, son filas con hipervínculos, al utilizar query solo me trae el texto o valor, sin el enlace, tendrás alguna opción o tip para solucionar esto?

    1. hola!

      Una posible solucion es crear una nueva columna con una formula parecida a esta

      =REGEXEXTRACT(FORMULATEXT(B2);”[(](.+);”)

      Que vuelve la formula un texto y extrae la url

      después eso ya lo puedes usar en otro hipervinculo

      Un gran saludo!

  56. Hola, estupenda página.
    Se puede dividir una columna con query, tal y como lo hace split?
    Digamos que tengo una tabla y la segunda columna la quiero dividir en dos.

    Solo se me ocurre hacer una tabla intermedia, pero me temo que no sea dinamica respecto el rango completo del origen de los datos.

    Gracias por tus tutoriales

    1. Hola Jaime

      Mil gracias!

      Desafortunadamente no se puede directamente desde QUERY

      Nos tocaría usar arrayformula con el split y después hacer el query

      Algo así como

      QUERY(ArrayFormula(SPLIT(A1:A));”SELECT *”)

      ¡Un gran saludo!

  57. Hola!
    Quisiera saber como puedo ponerle la condición de que me traiga unicamente de una columna las celdas que tengan una formula específica!
    Mil gracias

    1. Hola Natalia

      Wow! Complejo. Tendriamos que ver el caso con lupa.

      Como lo veo asi por encima, no se podria.

      Tendriamos que hacer unas columnas auxiliares que nos extraigan la formula, con =FORMULATEXT(A1), y despues si hacer el fitro en el QUERY

      Un gran saludo!

    1. Hola!

      Hay un truco que puedes hacer, el problema es que si tu QUERY ya es muy largo, te toca cambiarlo todo.

      Si en vez de =QUERY(A1:DD;”SELECT A,AB,BY”

      Lo cambias por

      =QUERY({A1:DD};”SELECT Col1,Col28,Col77″)

      Lo malo de esto es que ahora todas tus columnas tienes que identificarlas con números

      Y si tienes otros comandos como WHERE o ORDER BY ahi tambien tienes que cambiar las letras de columna por “Col “+ el numero de la columna

      Me cuentas si te funciona.

      Saludos!

  58. Como va? muy bueno el post.
    Te consulto, no estoy logrando hacer querys con %. Me trae error. hay algo que no este viendio?

    ej: =query(‘Base 2’!A1:J61,”Select B WHERE C < 5% ",1)

  59. Hola buen dia, te consulto, ojala me puedas ayudar.
    Tengo un libro de GoogleSheet, y varias hojas con informacion, todaslas hojas tienen los mismos encabezados y cantidad de columnas.
    Esta formula me sirve para reunir todas las hojas en una hoja consolidada??
    Saludos. Cristián.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Pin It on Pinterest

Share This