Web informativa e independiente. No vende herramientas ni usa enlaces de afiliado. La IA puede equivocarse: verifica siempre lo importante y no compartas datos personales o confidenciales sin base legal.

Ejemplo resuelto: consulta SQL de ventas por mes

Este ejemplo es ilustrativo y las tablas, columnas y cifras son inventadas. Sirve para ver cómo describir un esquema a un asistente de IA, qué consulta puede proponer y qué comprobar antes de ejecutarla sobre datos reales.

El caso

Javier es el responsable administrativo de una distribuidora de productos de limpieza. Su base de datos PostgreSQL tiene una tabla pedidos con las columnas id, cliente_id, fecha (tipo fecha), total (importe sin impuestos) y estado (por ejemplo «completado», «cancelado» o «pendiente»). Necesita un informe con los pedidos y los ingresos de cada mes de 2025, sin contar los cancelados ni los pendientes.

Prompt utilizado

Eres un analista de datos con experiencia en SQL. Mi base de datos es PostgreSQL. La tabla pedidos tiene: id, cliente_id, fecha (date), total (numeric, sin impuestos) y estado (texto: completado, cancelado, pendiente). Escribe una consulta que devuelva, por cada mes de 2025, el número de pedidos y la suma de total, contando solo los pedidos con estado completado y ordenando de enero a diciembre. Explica cada cláusula, indica cómo adaptarla a otro gestor de bases de datos y avisa de los casos en los que el resultado podría inducir a error, por ejemplo meses sin ventas.

Respuesta ilustrativa de un asistente

Consulta propuesta:

SELECT
  date_trunc('month', fecha) AS mes,
  COUNT(*) AS num_pedidos,
  SUM(total) AS ingresos
FROM pedidos
WHERE estado = 'completado'
  AND fecha >= DATE '2025-01-01'
  AND fecha < DATE '2026-01-01'
GROUP BY date_trunc('month', fecha)
ORDER BY mes;

Explicación:
- date_trunc('month', fecha) convierte cada fecha en el primer día de su mes, de modo que todos los pedidos de un mismo mes quedan agrupados.
- El filtro de fechas usa un intervalo semiabierto (desde el 1 de enero de 2025 hasta antes del 1 de enero de 2026). Así no se pierden pedidos de las últimas horas del 31 de diciembre si la columna incluyera hora.
- COUNT(*) cuenta pedidos y SUM(total) suma los importes de cada grupo.
- ORDER BY mes ordena cronológicamente.

Adaptación: en MySQL se puede agrupar con DATE_FORMAT(fecha, '%Y-%m'). En otros gestores la función cambia, pero la lógica es la misma.

Avisos:
- Los meses sin pedidos completados no aparecerán en el resultado. Si necesitas ver los doce meses, hay que generar una serie de meses y combinarla con esta consulta.
- Si hay pedidos duplicados en la tabla, los totales se inflarán.
- Comprueba si total incluye o no los impuestos antes de presentar el informe.

Qué revisar antes de usarla

  • Confirmar que los nombres de tabla y columnas coinciden exactamente con tu esquema; la IA puede suponer nombres que no existen.
  • Ejecutar la consulta primero sobre una copia o con LIMIT y comparar un mes concreto con un recuento hecho a mano o con otro informe.
  • Comprobar que el valor del estado está escrito igual que en tus datos, con la misma ortografía y las mismas mayúsculas.
  • Verificar que el intervalo de fechas cubre el 1 de enero y el 31 de diciembre completos y que no se cuenta ningún día de 2026.
  • Revisar si faltan meses sin ventas en el resultado y decidir si necesitas que aparezcan con valor cero.

Versión final tras la revisión

Consulta definitiva para PostgreSQL, probada primero en la copia de pruebas:

SELECT
  to_char(date_trunc('month', fecha), 'YYYY-MM') AS mes,
  COUNT(*) AS num_pedidos,
  SUM(total) AS ingresos_sin_impuestos
FROM pedidos
WHERE estado = 'completado'
  AND fecha >= DATE '2025-01-01'
  AND fecha < DATE '2026-01-01'
GROUP BY date_trunc('month', fecha)
ORDER BY date_trunc('month', fecha);

Cambios respecto a la propuesta: el mes se muestra como texto con año y mes, y el nombre de la columna de importes aclara que no incluye impuestos. Se ha contrastado el mes de marzo con el listado manual de pedidos y coincide. No hay pedidos duplicados. En febrero no hubo ventas y ese mes no aparece, algo que se anota en el informe.

Lecciones del ejemplo

  • Dar a la IA el esquema exacto, con tipos de datos y valores posibles, reduce mucho las consultas con nombres inventados.
  • Indicar el gestor de bases de datos importa, porque las funciones de fecha cambian entre sistemas.
  • Conviene probar siempre sobre una copia o con un límite de filas antes de ejecutar una consulta sobre datos reales.
  • Un resultado que sale sin errores no es necesariamente correcto: hay que contrastar al menos un grupo con un cálculo independiente.

Preguntas frecuentes

¿Es seguro pegar mis tablas reales en un asistente de IA?

Basta con describir la estructura: nombres de tablas, columnas y tipos. No hace falta pegar datos reales ni información personal de clientes. Si tu empresa tiene normas sobre herramientas externas, consúltalas antes de compartir nada.

¿Por qué usar un intervalo semiabierto en las fechas?

Porque evita errores con las horas. Usar «fecha menor que el primer día del periodo siguiente» incluye todo el último día, mientras que «menor o igual al 31 de diciembre» puede dejar fuera pedidos si la columna guarda hora.

¿Qué hago si la consulta es lenta con muchos datos?

Consulta con la persona que administra la base de datos. Puede revisar los índices sobre las columnas de fecha y estado y el plan de ejecución. Pide también al asistente que explique cómo se podría optimizar, pero valida cualquier cambio.

Guía completa de la tarea: Cómo crear consultas SQL con ayuda de un asistente de IA.

Fuentes oficiales para profundizar

Última revisión: . Esta web es informativa y no sustituye el consejo de un profesional.