# SQL Analysis

> Analiza datos en bases de datos relacionales con consultas SQL eficientes y legibles, incluyendo joins, window functions, CTEs y subqueries, para extraer insights directamente de la base de datos.

- Skill: `leandrobenjaminl/sql-analysis` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add leandrobenjaminl/sql-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/leandrobenjaminl/sql-analysis/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics, SQL & Databases
- Tags: Cte, Data Analysis, Database, Joins, Sql, Subqueries, Window Functions
- License: MIT
- Author: LeandroBenjaminL (https://skillmd.com/u/leandrobenjaminl)
- Updated: 2026-08-22
- Page: https://skillmd.com/skills/leandrobenjaminl/sql-analysis

---


# Skill: sql-analysis

SQL para análisis. No solo SELECT * FROM.

## Trigger

- Los datos están en una base de datos relacional
- Necesitás agregar, filtrar o cruzar tablas grandes
- La pregunta se responde con una consulta SQL directa
- Querés hacer análisis sin mover los datos a Python

## Workflow LEND

```
1. ANALIZAR
   ├── Esquema: ¿qué tablas hay? ¿cómo se relacionan?
   ├── Volumen: ¿cuántas filas? ¿índices? ¿particiones?
   ├── Pregunta: ¿qué datos necesito? ¿en qué granularidad?
   └── SQL o Python? si necesitás transformaciones complejas, Python.

2. OFRECER (Menú del Senior)
   ├── A) Consulta directa — SELECT + WHERE + GROUP BY, simple y rápida
   ├── B) CTE + Window functions — consultas más complejas pero legibles
   └── C) Materialized view — si la consulta se repite, crear vista

3. ELEGIR → confirmación

4. HACER
   ├── FROM + JOINs con cardinalidad clara (1:1, 1:N, N:M)
   ├── WHERE temprano: filtrar antes de agregar
   ├── GROUP BY con agregaciones (SUM, AVG, COUNT, MIN, MAX)
   ├── Window functions para rankings, running totals, YoY
   ├── CTEs para legibilidad (WITH ... AS ...)
   └── ORDER BY + LIMIT al final, EXPLAIN ANALYZE para performance

5. VERIFICAR
   ├── La cardinalidad del JOIN es correcta (no hay duplicación inesperada)
   ├── Los agregados tienen sentido (SUM con GROUP BY correcto)
   └── La consulta corre en tiempo aceptable (< 1s para dashboards)
```

## Patrones

- **WHERE antes de JOIN**: filtrar lo más temprano posible reduce filas a procesar
- **CTE para legibilidad**: partí consultas largas en bloques con WITH
- **Window functions**: ROW_NUMBER(), RANK(), LAG(), LEAD() para análisis sin perder detalle
- **EXPLAIN ANALYZE**: si una consulta es lenta, el plan de ejecución dice por qué
- **Índices**: si filtrás por fecha o cliente seguido, poné un índice

## Anti-patrones

- ❌ SELECT * en producción — trae columnas al pedo, mata performance
- ❌ JOIN sin verificar cardinalidad — un 1:N cuando esperabas 1:1 te duplica filas
- ❌ Filtrar después de GROUP BY — usá HAVING, no WHERE
- ❌ Subqueries correlacionadas — suelen ser lentas. Usá CTE o JOIN
- ❌ No usar índices — consultas de 10 segundos se vuelven 10ms con el índice correcto

