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

Introducción a QUERY en Google Sheets
— by

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.

Suscríbete para acceder al curso «Descubriendo el poder de Google Sheets» y empezar tu camino a la maestría de Sheets, Forms y Apps Script

,

Boletín

Nuestras últimas noticias en tu correo electrónico

Respuestas

  1. Avatar de Fabian Gaete
    Fabian Gaete

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!
      Puedes forzar la columna a numero con la función N, asi
      {ArrayFormula(N(A1:A)\B1:B}
      Saludos!

  2. Avatar de Juan Esteban
    Juan Esteban

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!
      Hay dos maneras
      La mas comun es con OR
      WHERE A =’Argentina’ OR A=’Brazil’
      Saudos!

  3. Avatar de Teresa
    Teresa

    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. Avatar de jsguzmanb
      jsguzmanb

      Hola!
      Mil gracias por las palabras

      Creo que no entiendo bien tu caso.

      Si me puedes poner un par de pantallazos o ejemplos de la tabla mejor

      Saludos!

  4. Avatar de Sebastian
    Sebastian

    Hola, la condicion puede ser el contenido de una celda en lugar de un texto?
    ej: WHERE Col1 = «DATA!$A$2» AND Col2 = «HTTP … PL!$B$3»

    Gracias

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Claro que si

      Tienes que cerrar » y usar & para unir

      Algo asi

      «WHERE A=’»&B2&»‘»

      Saludos!

  5. Avatar de maxi
    maxi

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  6. Avatar de Fidel
    Fidel

    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

    1. Avatar de jsguzmanb
      jsguzmanb

      HOla!

      A IS NULL te deberia funcionar

      Saludos!

  7. Avatar de Carmen
    Carmen

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

    1. Avatar de jsguzmanb
      jsguzmanb

      Es mejor que uses una sola convención de mayusculas y minusculas para asegurarte que no es eso

      «SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1 ASC»

      Saludos!

  8. Avatar de Diana Hurtado
    Diana Hurtado

    Cual es la función del 1 o del 0 al final

    1. Avatar de jsguzmanb
      jsguzmanb

      Tomar los encabezados como encabezados (1), o como datos (0)

      Saludos!

  9. Avatar de Fernando
    Fernando

    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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hmmm

      Habría que ver los datos

      Saludos!

  10. Avatar de Marcelo
    Marcelo

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      No tienes que ponerle comillas sencillas al limit ya que es un número
      Saludos!

  11. Avatar de Carlos

    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

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Esa concatenación se hace on la función arreglo {}

      Saludos!

  12. Avatar de Pedro
    Pedro

    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!

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Intenta cambiar el formato de la columna de origen a «Texto sin formato»

      Saludos!

  13. Avatar de Mónica González
    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Puede ser un tema de formatos. Asegurate que la que es Col11, este con formato de texto

      Saludos!

  14. Avatar de Daniel Sepúlveda
    Daniel Sepúlveda

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  15. Avatar de Fausto

    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")&"'")))

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Fausto

      Asegúrate que Col2 es un texto. Si es un número, quítale las comillas sencillas

      Me cuentas

      Saludos!

  16. Avatar de Octavio
    Octavio

    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!

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Octavio

      Ya te respondí en el otro comentario

      Saludos!

  17. Avatar de Octavio
    Octavio

    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. Avatar de jsguzmanb
      jsguzmanb

      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. Avatar de Octavio
        Octavio

        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.

  18. Avatar de Silvia
    Silvia

    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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Silvia

      seria algo asi

      QUERY(datos;»WHERE A IS NOT NULL»)

      Saludos!

      Un gran saludo!

  19. Avatar de Carlos Andrés Dueñas
    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!

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Carlos

      Aquí te dejo un video donde explico estos casos

      https://youtu.be/TTV8JZj12Ps

      Me cuentas si te sirve
      Saludos!

  20. Avatar de CARLOS ANDRÉS DUEÑAS
    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!

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Carlos

      Claro que si

      Aquí te dejo un video donde lo explico

      https://youtu.be/TTV8JZj12Ps

      Un gran saludo!

  21. Avatar de Lay
    Lay

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  22. Avatar de Patri
    Patri

    ¡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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Primer cambio:

      Cambia «col14» por «Col14»

      Me vas contando

      Saludos!

  23. Avatar de Yesica
    Yesica

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Yesica

      No se si viste este video, de pronto te da ideas

      https://youtu.be/CMvKw1TAi9I

      Saludos!

  24. Avatar de Jorge Gabriel
    Jorge Gabriel

    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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Jorge

      El tema es que QUERY «decide» que la columna es una de las dos: o texto o números

      Una solución es coger la columna original y darle a todo formato de texto

      Saludos!

  25. Avatar de Pedro
    Pedro

    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!

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Pedro

      Tu formula esta perfecta. Lo unico es que como tu pestaña es una frase debes ponerle entre comillas simples

      ‘Hoja pedido’

      Saludos

      Un gran saludo!

  26. Avatar de Rebeca
    Rebeca

    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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Rebeca

      Cambia el 100% por 1 y te debería funcionar

      Un gran saludo!

      1. Avatar de Ricardo
        Ricardo

        Muchas gracias. Tenía problemas con el mismo tema.

  27. Avatar de Jorge Rodríguez
    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Jorge

      Sería algo asi:

      Asumiendo que la Col A es la de los modelos, y B la de las ventas

      =QUERY(QUERY(datos;»SELECT A,SUM(B) GROUP BY A);»WHERE Col2=1″)

      Un gran saludo!

  28. Avatar de Marcelo
    Marcelo

    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

  29. Avatar de Marcelo De Paula
    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. Avatar de Marcelo
      Marcelo

      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

  30. Avatar de Jaym
    Jaym

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Mil gracias por tus palabras!

      Aquí te dejo un video que te puede dar ideas. No se conecta con archivos…tengo pendiente ese video

      https://youtu.be/7xL3ofaxIVw

      Saludos!

  31. Avatar de jason brenes
    jason brenes

    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

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Te respondí en el otro comentario

      Saludos!

  32. Avatar de jason brenes
    jason brenes

    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)

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Jason

      Te debería funcionar

      Pruebalo primero con valores fijos a ver si tienes algún tema con las referencias

      Saludos!

  33. Avatar de Samuel
    Samuel

    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)

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Samuel

      No entiendo bien tu pregunta

      Un gran saludo!

  34. Avatar de Cristina
    Cristina

    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

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Cristina

      Usa la clausula OR

      Saludos!

  35. Avatar de Pablo Cajar
    Pablo Cajar

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  36. Avatar de Terry
    Terry

    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″))

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Solo necesitas conectarte una vez desde un computador, darle «permitir» y ya lo puedes usar sin problema en tu movil

      Saludos!

  37. Avatar de Gabriel
    Gabriel

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Gabriel

      El QUERY esta bien

      Vete a tus datos, selecciona la columna y cámbiale el formato a texto

      Me cuentas si te sirve

      Saludos!

  38. Avatar de Gabriel
    Gabriel

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Gabriel

      Ahí te respondí en el otro comentario

      Saludos!

  39. Avatar de Hernando olaya
    Hernando olaya

    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. Avatar de Hernando olaya
      Hernando olaya

      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.

      1. Avatar de jsguzmanb
        jsguzmanb

        Excelente aporte!

        La verdad no soy muy bueno en SQL entonces menos mal lo descifraste y le puede servir a otro

        Un gran saludo!

  40. Avatar de Carlos Moya
    Carlos Moya

    Hola.
    Quisiera saber cual es el Query para buscar entre intervalos de fechas?.
    Gracias

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Carlos

      Aquí te dejo el video

      https://www.youtube.com/watch?v=rF_7Xiw_EI4

      Saludos!

  41. Avatar de Esteban

    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 😉

    1. Avatar de jsguzmanb
      jsguzmanb

      Tienes razón!

      Si solo hay una coincidencia, o si solo necesitas la primera, un VLOOKUP hace el trabajo

      QUERY funciona mejor para cuando son varios resultados

      Saludos!

  42. Avatar de Esteban

    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. Avatar de jsguzmanb
      jsguzmanb

      Hola Esteban

      Ibas por muy buen camino
      Como es una concatenación de texto hay que hacer un juego de comillas
      Seria asi:

      =QUERY(Tabla1!A1:C;»SELECT A WHERE C = ‘»&Tabla2!B1″‘»;0)

      Saludos!

      1. Avatar de Jonathan
        Jonathan

        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

        1. Avatar de jsguzmanb
          jsguzmanb

          Hola Jonathan

          Solo te falta concatenar la comilla sencilla al final

          AND B=’»&$B$3&»‘»

          Saludos

  43. Avatar de Jamely
    Jamely

    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?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!

      Aquí te dejo el video que te explica eso

      https://youtu.be/8Utinr3rNI8

      Saludos!

  44. Avatar de Yiseth
    Yiseth

    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. Avatar de jsguzmanb
      jsguzmanb

      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. Avatar de Gustavo
        Gustavo

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

        1. Avatar de jsguzmanb
          jsguzmanb

          Hola!

          El tema con QUERY es que es una fórmula que convierte todo a texto

          Una opción es pasar todo a texto

          La otra es que toda la columna tengo el mismo formato así sea numero

          Saludos!

  45. Avatar de Gerardo
    Gerardo

    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

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Gerardo

      Disculpa es que WordPress cambia los simbolos de comillas, como estas poniendo el operador de «En Cancelación»

      Saludos!

  46. Avatar de Jimmy González
    Jimmy González

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

      1. Avatar de Raúl
        Raúl

        Hola, conoces o tienes algún tutorial, sobre esta opción que comentas?
        Gracias

        1. Avatar de jsguzmanb
          jsguzmanb

          Hola Raul

          No conozco de eso específico, pero ya mismo lo pongo en el listado para hacerlo pronto

          Un gran saludo!

  47. Avatar de jaime
    jaime

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  48. Avatar de Josue
    Josue

    Buen contenido, tienes un ejemplo con la opción de traer los datos de otra hoja de cálculo (otro archivo).

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Josue

      Mil gracias!

      Aquí te dejo un video usando QUERY e IMPORTRANGE

      https://youtu.be/Ck-DRfZlwpM

      Un gran saludo!

  49. Avatar de OMAR TLAXCA SANTOS

    Tengo duda por que el query transforma mis datos en texto cuando son valores numéricos?

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Omar!

      Cuentame el ejemplo exacto para poder ayudarte

      Un gran saludo!

  50. Avatar de Natalia Romero
    Natalia Romero

    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. Avatar de jsguzmanb
      jsguzmanb

      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!

  51. Avatar de Dario Piancino
    Dario Piancino

    Hola Que tal.
    Te hago una consulta.
    Quiero traer datos de la columna BY y me lo toma como un operador que se puede hacer

    1. Avatar de jsguzmanb
      jsguzmanb

      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!

  52. Avatar de ivan
    ivan

    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)

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Ivan

      Mil gracias por escribir.

      Es mejor que uses decimales y no % porque este es un operador diferente para QUERY

      Cambialo por 0.05

      Me cuentas si te funciona

      Saludos!

  53. Avatar de Cristian Martinez
    Cristian Martinez

    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.

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Cristian

      Si, esa es la fórmula perfecta

      Aquí te dejo un video donde hago exactamente lo que necesitas.

      https://youtu.be/Qhky_Q33mp8

      Espero te sirva

      Saludos!

  54. Avatar de CARLOS
    CARLOS

    Excelente, mil gracias!

  55. Avatar de Julian Ojeda
    Julian Ojeda

    Excelente explicación. Muchas gracias por el aporte. Veamos un pasito mas adelante sobre esta función.

    Saludos

    1. Avatar de jsguzmanb
      jsguzmanb

      Mil gracias Julian.

      Un gran saludo!

Deja una respuesta

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