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

Minitutorial: Analiza datos meteorológicos reales en SQL y encuentra la mejor época para viajar

¿Buscas el momento perfecto para irte de vacaciones? Con unas pocas consultas SQL y datos meteorológicos reales de Szeged, Hungría, puedes averiguar qué meses son calurosos, lluviosos o ideales para pasear al sol. Este minitutorial es una forma práctica y divertida de perfeccionar tus conocimientos de SQL y, de paso, planificar tu próximo viaje.

¿Busca sol y poca lluvia?

Planificar unas vacaciones no consiste sólo en elegir un destino. También es cuestión de tiempo: ¿cuándo hace buen tiempo?

Con unas pocas consultas SQL, puede responder a preguntas como: ¿Cuál es el mes más caluroso en una ciudad? ¿Cuándo llueve con más frecuencia? ¿Son frecuentes los días ventosos en primavera? En este tutorial, trabajarás con datos meteorológicos históricos reales de Szeged, Hungría, y practicarás habilidades SQL esenciales como SELECT, GROUP BY, HAVING y ORDER BY. Se trata de un miniproyecto práctico que combina la práctica del mundo real con un poco de curiosidad viajera.

¿Quieres repasar primero los conceptos básicos? Prueba el curso de SQL para principiantes en LearnSQL.es- es fácil de aprender, interactivo y enseña todo lo que necesitas para seguir este tutorial.

También puede adaptar estas consultas para analizar el tiempo en otros lugares. API del tiempo histórico

¿Busca datos de otros lugares? La API de meteor ología histórica de Open-Meteo es un gran recurso gratuito para descargar el historial meteorológico por ciudad o coordenada.

SQL no es sólo para informes y cuadros de mando, puede incluso ayudarle a planificar sus próximas vacaciones. Vamos a ello.

Primeros pasos: Cargar el conjunto de datos meteorológicos

Utilizaremos un conjunto de datos público Weather in Szeged 2006-2016 de Kaggle, que contiene datos meteorológicos diarios de 2006 a 2016.

  1. Descarga los datos: Visita la página de Kaggle y descarga el archivo weatherHistory.csv
  2. Prepare el archivo para la importación.

Para importarlo a una base de datos de tu elección, necesitas:

  • Eliminar la dirección +01:00 de Formatted Date. Puedes utilizar la función Buscar y reemplazar de tu editor.
  • Cambiar el nombre de las cabeceras para utilizar guiones bajos en lugar de espacios.

Puede editar el archivo con Excel, el Bloc de notas o cualquier editor de texto.

Aquí está la fila de encabezado limpiada:

formatted_date,summary,precip_type,temperature_c,apparent_temperature_c,humidity,wind_speed_kmh,wind_bearing_deg,visibility_km,pressure_mb,daily_summary
  1. Cree la tabla en su base de datos
CREATE TABLE szeged_weather (
  formatted_date TEXT,
  summary TEXT,
  precip_type TEXT,
  temperature_c FLOAT,
  apparent_temperature_c FLOAT,
  humidity FLOAT,
  wind_speed_kmh FLOAT,
  wind_bearing_deg FLOAT,
  visibility_km FLOAT,
  pressure_mb FLOAT,
  daily_summary TEXT
);
  1. Importe el archivo CSV

En PostgreSQL

COPY szeged_weather FROM '/path/to/weatherHistory.csv' DELIMITER ',' CSV HEADER;

o en MySQL:

LOAD DATA INFILE '/path/to/weatherHistory.csv' INTO TABLE szeged_weather
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

Asegúrese de que su base de datos está configurada para permitir la importación de archivos.

Paso a Paso: Análisis de los Datos Meteorológicos en SQL

Comience por Explorar los Datos

Antes de sumergirse en el análisis, es útil comprender con qué tipo de datos está trabajando. Veamos algunas filas del conjunto de datos.

Consulta SQL

SELECT *
FROM szeged_weather
LIMIT 5;

Ejemplo de salida

formatted_datesummaryprecip_typetemperature_capparent_temperature_chumiditywind_speed_kmhwind_bearing_degvisibility_kmpressure_mbdaily_summary
2016-09-01 00:00:00Partly Cloudyrain21.121.00.8913.02309.51012.3Partly cloudy throughout the day
2016-09-01 01:00:00Mostly Cloudyrain20.720.60.9211.32409.41012.1Partly cloudy throughout the day
2016-09-01 02:00:00Overcastrain20.320.20.9310.72459.21011.9Partly cloudy throughout the day
2016-09-01 03:00:00Overcastrain19.919.80.949.92509.01011.7Partly cloudy throughout the day
2016-09-01 04:00:00Mostly Cloudyrain19.519.40.959.32558.91011.6Partly cloudy throughout the day

Cómo funciona

  • SELECT * devuelve todas las columnas - útil para un primer vistazo.
  • LIMIT 5 devuelve sólo las 5 primeras filas. Mantiene la salida manejable y no satura la base de datos.

Lo que acaba de practicar

  • Vista previa de la estructura de datos
  • Exploración de las columnas disponibles
  • Confirmación del formato y tipos de datos

¿Es nuevo en SQL? El curso SQL para principiantes en LearnSQL.es te guía a través de estos primeros pasos de forma interactiva - perfecto si estás empezando.

Qué significa esto para usted

Verá columnas como formatted_date, temperature_c, wind_speed_kmh, y summary. Esto te da un contexto de lo que es posible - y qué campos puedes filtrar o agrupar más tarde.

¿Cuál es la temperatura media en Szeged?

Empecemos con algo sencillo: la temperatura media de todo el conjunto de datos.

Consulta SQL

SELECT 
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather;

Ejemplo de salida

avg_temp
14.6

Cómo funciona

  • AVG() calcula el valor medio.
  • ROUND(..., 1) facilita la lectura mostrando sólo un decimal.

Lo que Acaba de Practicar

  • Agregación básica con AVG()
  • Formateo de salida numérica
  • Obtención de un número a gran escala a partir de datos sin procesar

¿Quieres dominar las funciones SQL? Echa un vistazo a la Funciones estándar de SQL curso sobre LearnSQL.es - cubre AVG(), SUM(), MIN(), MAX(), y más, con ejercicios prácticos y casos de uso reales

Lo que esto significa para usted

El resultado indica la temperatura media diaria en Szeged durante todo el periodo de 10 años. Esto es útil como punto de referencia - más tarde, puede comparar meses o días específicos con esta línea de base.

¿En qué mes hace más calor en Szeged?

Está buscando días cálidos y soleados, quizá para visitar los mercados locales, pasear junto al río o simplemente para no tener que llevar abrigo. Averigüemos qué mes tiene la temperatura media más alta en Szeged.

Consulta SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather
GROUP BY month
ORDER BY month;

Ejemplo de resultado

monthavg_temp
10.4
22.6
37.9
413.5
518.6
622.3
724.9
824.4
919.1
1013.0
116.7
121.5

Cómo funciona

  • EXTRACT(MONTH FROM ...) extrae el mes de cada fecha.
  • AVG(temperature_c) calcula la temperatura media mensual.
  • ROUND(..., 1) le da formato a un decimal.
  • GROUP BY y ORDER BY estructura los resultados para facilitar la comparación.

Lo que acaba de practicar

  • Agregación con AVG()
  • Trabajar con partes de fechas utilizando EXTRACT()
  • Agrupación y ordenación de resultados de consultas

¿Quieres más práctica estructurada?

Pruebe la Práctica de SQL Group BY en LearnSQL.es. Este curso para principiantes se centra en el uso de GROUP BY con funciones agregadas como AVG(), SUM(), MIN(), y COUNT() en diferentes escenarios y conjuntos de datos. Es perfecto para reforzar lo que acaba de practicar en un formato interactivo.

Lo que esto significa para usted

  • Julio es el mes más cálido en Szeged, seguido de cerca por agosto.
  • Mayo y septiembre son templados y buenos para quienes prefieren un clima confortable.
  • Evite los meses de enero a marzo si desea disfrutar de días cálidos.

¿Cuáles son los tipos de tiempo más comunes?

Veamos qué tipo de tiempo es más probable que experimente, basándonos en la columna resumen.

Consulta SQL

SELECT 
  summary,
  COUNT(*) AS occurrences
FROM szeged_weather
GROUP BY summary
ORDER BY occurrences DESC
LIMIT 10;

Ejemplo de salida

summaryoccurrences
Partly Cloudy5200
Mostly Cloudy4300
Clear3800
Overcast3100
Foggy1900
Breezy and Partly Cloudy1200
Breezy and Mostly Cloudy1100
Humid and Mostly Cloudy950
Dangerously Windy and Partly Cloudy850
Dry and Mostly Cloudy800

Cómo funciona

  • COUNT(*) calcula la frecuencia con la que aparece cada resumen.
  • GROUP BY summary agrupa valores idénticos.
  • ORDER BY ... DESC y LIMIT ayudan a centrarse en los 10 tipos de tiempo principales.

Lo que acaba de practicar

  • Análisis de frecuencia con COUNT(*)
  • Ordenación descendente de resultados
  • Limitación de la salida con LIMIT

Qué significa esto para usted

  • "Parcialmente nublado" es muy común, por lo que puede esperar cielos mixtos.

Si sus vacaciones perfectas requieren sol constante, compruebe con qué frecuencia aparece "Despejado".

¿Con qué frecuencia llueve cada mes?

El clima cálido es estupendo, pero no si llueve constantemente. Averigüemos con qué frecuencia llueve en Szeged cada mes - no sólo la precipitación total, sino cuántas horas suelen incluir lluvia.

Cada fila de este conjunto de datos representa una hora de tiempo. Así, cuando calculamos los porcentajes de lluvia, estamos respondiendo: "De todas las horas de un mes determinado, ¿cuántas tuvo lluvia?".

Consulta SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(
    SUM(CASE WHEN LOWER(summary) LIKE '%rain%' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
    1
  ) AS percent_rainy
FROM szeged_weather
GROUP BY month
ORDER BY month;

Ejemplo de resultado

monthpercent_rainy
112.8
210.2
315.3
418.1
521.5
625.6
719.2
816.8
920.4
1017.7
1114.9
1213.3

Cómo funciona

  • EXTRACT(MONTH FROM formatted_date) nos da el número de mes (1-12)
  • LOWER(summary) se asegura de que coincidan palabras como "Rain" o "rain
  • CASE WHEN ... THEN 1 ELSE 0 END comprueba cada fila:
    • Si contiene "lluvia" → volver 1
    • Si no → volver 0
  • SUM(...) suma todos los 1s - ese es el número de horas de lluvia en ese mes
  • COUNT(*) nos da el total de horas del mes
  • Dividimos, multiplicamos por 100 y redondeamos el resultado para obtener un porcentaje limpio

Lo que acabas de practicar

  • Uso de EXTRACT() para agrupar datos por mes
  • Aplicación de un contador condicional con CASE WHEN en su interior SUM()
  • Hacer que las búsquedas de texto no distingan entre mayúsculas y minúsculas con LOWER()
  • Cálculo de porcentajes a partir de datos agrupados
  • Formateo de números con ROUND()

¿Quieres perfeccionar estos conocimientos?

Consulte el Cómo crear informes básicos con SQL en LearnSQL.es. Este curso interactivo explica cómo utilizar funciones de agregación (AVG(), COUNT(), SUM()), clasificar datos con CASE WHEN y crear informes sencillos con GROUP BY. Está pensado para principiantes, con escenarios reales y más de 90 ejercicios prácticos para reforzar lo aprendido.

Lo que esto significa para usted

Si estás planeando unas vacaciones, esto te da una idea real:

  • Junio tiene una mayor probabilidad de lluvia: alrededor del 25% de todas las horas.
  • Agosto es más seguro, con menos horas de lluvia

Utiliza este método también con otras condiciones: nieve, niebla o tiempo soleado. Basta con cambiar una palabra en la cláusula LIKE.

¿Qué días fueron fríos y ventosos?

Algunas condiciones meteorológicas no aparecen en las medias mensuales. Busquemos los días en los que hizo frío y viento, condiciones que hacen que estar al aire libre resulte incómodo.

Consulta SQL

SELECT 
  formatted_date,
  temperature_c,
  wind_speed_kmh
FROM szeged_weather
WHERE temperature_c < 5 AND wind_speed_kmh > 30
ORDER BY temperature_c;

Muestra de resultados

formatted_datetemperature_cwind_speed_kmh
2015-01-07 05:00:00-6.434.2
2013-12-01 03:00:00-3.831.7
2014-02-12 08:00:00-2.536.0
2016-01-19 04:00:000.932.5
2012-11-28 01:00:004.233.1

Cómo funciona

  • WHERE filtra las filas que cumplen ambas condiciones: frío y viento.
  • ORDER BY temperature_c Las enumera de más frío hacia arriba.

Lo que acaba de practicar

  • Múltiples condiciones en un filtro
  • Operadores lógicos (AND)
  • Ordenar por columnas específicas

Lo que esto significa para usted

  • Estos días son raros pero duros. La mayoría caen entre noviembre y marzo.
  • Esto apoya la idea de que Szeged no es ideal para viajar en invierno.

Reto: ¿Cuál fue la temperatura más alta jamás registrada?

Aquí tienes la oportunidad de aplicar lo que has aprendido. ¿Puedes encontrar la hora más calurosa de todo el conjunto de datos de Szeged?

Tarea SQL

Necesitarás

  • MAX(temperature_c) encontrar el valor más alto registrado
  • ORDER BY temperature_c DESC ordenar los datos
  • LIMIT 1 obtener sólo la hora más calurosa
  • O utilizar una subconsulta para obtener tanto la temperatura como la fecha en que se produjo.

Te dejamos la consulta a ti. Pruébala y descubre a qué temperaturas extremas se ha enfrentado Szeged en verano.

Pruébalo con otras ciudades

¿Y lo mejor? Estas consultas funcionan en cualquier lugar. Tanto si tienes curiosidad por saber cuál es el mes más ventoso en Varsovia como la estación más soleada en Sídney, sólo tienes que cargar un conjunto de datos meteorológicos históricos en SQL y empezar a explorar.

No sólo está practicando, está descubriendo. Datos reales. Preguntas reales. Respuestas reales.
Y puede que incluso su próximo lugar de vacaciones.

¿Desea perfeccionar sus conocimientos de SQL? LearnSQL.es le ofrece cursos prácticos e interactivos en los que podrá escribir y ejecutar SQL en su navegador. Comience con el curso SQL para principiantes y siga avanzando a partir de ahí.