Dos técnicas avanzadas de SQL que pueden mejorar drásticamente tus consultas

Two advanced SQL techniques that can dramatically improve your queries.

Aprende sobre Expresiones de Tablas Comunes (CTE) y Funciones de Ventana

Foto de Karina Szczurek en Unsplash

SQL es el pan y la mantequilla de todo profesional de datos. No importa si eres un analista de datos, un científico de datos o un ingeniero de datos, necesitas tener una comprensión sólida de cómo escribir consultas SQL limpias y eficientes.

Esto se debe a que detrás de cualquier análisis de datos riguroso o cualquier modelo de aprendizaje automático sofisticado se encuentra el propio conjunto de datos, y estos datos deben provenir de algún lugar.

Espero que después de leer mi publicación de introducción a SQL, ya hayas aprendido que SQL significa Structured Query Language (Lenguaje de Consulta Estructurado) y es un lenguaje que se utiliza para recuperar datos de una base de datos relacional.

En esa publicación de blog, repasamos algunos comandos SQL fundamentales como SELECT, FROM y WHERE, que deberían cubrir la mayoría de las consultas básicas con las que te encontrarás al usar SQL.

Pero, ¿qué sucede si esos comandos simples simplemente no son suficientes? ¿Qué sucede si los datos que deseas requieren un enfoque más robusto para la consulta?

Bueno, no busques más porque hoy repasaremos dos nuevas técnicas de SQL que puedes agregar a tu conjunto de herramientas y que llevarán tus consultas al siguiente nivel. Estas técnicas se llaman Expresiones de Tablas Comunes (CTE) y Funciones de Ventana.

Para ayudarnos a aprender estas técnicas, utilizaremos un editor de SQL en línea llamado DB Fiddle (configurado para SQLite v3.39) y el conjunto de datos de la duración de los viajes en taxi obtenido de Google Cloud (licencia NYC Open Data).

Preparación de Datos

Si no estás interesado en aprender cómo preparé el conjunto de datos, siéntete libre de saltar esta sección y pegar el siguiente código en DB Fiddle para generar el esquema.

CREATE TABLE taxi (  id varchar,  vendor_id integer,  pickup_datetime datetime,  dropoff_datetime datetime,  trip_seconds integer,  distance float);INSERT INTO taxi VALUES('id2875421', 2, '2016-03-14 17:24:55', '2016-03-14 17:32:30', 455, 0.93), ('id2377394', 1, '2016-06-12 00:43:35', '2016-06-12 00:54:38', 663, 1.12), ('id3858529', 2, '2016-01-19 11:35:24', '2016-01-19 12:10:48', 2124, 3.97), ('id3504673', 2, '2016-04-06 19:32:31', '2016-04-06…