βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROYECTO: sql-chipi-case β
β El Secuestro de Chipi πΌ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββ
β equipos β
ββββββββββββββββ€
β id (PK) β
β nombre β
β descripcion β
ββββββββββββββββ
β 1:N
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββ
β alumnos β
ββββββββββββββββββββββββββββββββββββββββββββ€
β id (PK) β
β nombre β
β email [sospechosos] β
β equipo_id (FK β equipos) β
β turno ('maΓ±ana' o 'tarde') β
β fecha_inscripcion β
ββββββββββββββββββββββββββββββββββββββββββββ
β
ββ 1:N βββ βββββββββββββββββββββ
β β dispositivos β
β βββββββββββββββββββββ€
β β id (PK) β
β β tipo β
β β ip (UNIQUE) β
β β alumno_id (FK) β
β β fecha_registro β
β βββββββββββββββββββββ
β
ββ 1:N βββ βββββββββββββββββββββ
β β commits β
β βββββββββββββββββββββ€ [PISTAS]
β β id (PK) β
β β rama β
β β mensaje [chipi?] β
β β estado_ci β
β β fecha (TIMESTAMP) β
β β alumno_id (FK) β
β βββββββββββββββββββββ
β
ββ 1:N βββ ββββββββββββββββββββββββ
β β cafe_ordenes β
β ββββββββββββββββββββββββ€ [PISTA π¨]
β β id (PK) β
β β bebida β
β β leche β
β β hora [02:13?] β
β β fecha (TIMESTAMP) β
β β alumno_id (FK) β
β ββββββββββββββββββββββββ
β
ββ [MENCIONES] ββ βββββββββββββββββββββββ
β discord_logs β
βββββββββββββββββββββββ€ [PISTAS]
β id (PK) β
β usuario β
β canal β
β mensaje β
β fecha (TIMESTAMP) β
βββββββββββββββββββββββ
ββββββββββββββββββββ ββββββββββββββββββββ
β ubicaciones β β pistas β
ββββββββββββββββββββ€ ββββββββββββββββββββ€
β id (PK) β β id (PK) β
β nombre β β dia β
β lugar β β codigo [P-***] β
β estado [?] β β descripcion β
β ΓΊltima_update β β desbloqueo_sql β
ββββββββββββββββββββ β resuelta β
β fecha_creacion β
ββββββββββββββββββββ
id β nombre β descripcion
ββββΌββββββββββββββββββΌββββββββββββββββββββββ
1 β SuperKode A β Equipo Backend fuerte
2 β SuperKode B β Equipo Frontend creativo
3 β Los Pato Devs β Equipo DevOps
id β nombre β email β equipo_id β turno
ββββΌβββββββββββββββΌβββββββββββββββββββββΌββββββββββββΌββββββββ
1 β Miguel β miguel@... β 1 β maΓ±ana
2 β SalchiPresi β salchipresi@... β 1 β tarde
3 β Marcus β marcus@... β 1 β maΓ±ana
...
id β alumno_id β bebida β leche β hora β fecha
ββββΌββββββββββββΌβββββββββββββββββββΌββββββββββββΌβββββββββΌββββββ
9 β 9 (Wizi) β matcha latte β parcial β 02:13 β ... π¨
...
id β usuario β canal β mensaje
ββββΌββββββββββββββββββΌβββββββββββββββββΌββββββββββββββββ
1 β root_but_intern β #general β A las 02:13 Chipi desapareciΓ³...
...
id β alumno_id β mensaje β estado_ci β fecha
ββββΌββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββΌβββββ
1 β 1 (Miguel)β Implementar JWT con chipi_... β success β ...
...
SELECT a.nombre, e.nombre as equipo
FROM alumnos a
JOIN equipos e ON a.equipo_id = e.id;SELECT e.nombre, COUNT(a.id) as total_alumnos
FROM equipos e
LEFT JOIN alumnos a ON e.id = a.equipo_id
GROUP BY e.id;SELECT * FROM commits
WHERE mensaje ILIKE '%chipi%';SELECT a.nombre, COUNT(c.id) as commits_fallidos
FROM alumnos a
JOIN commits c ON a.id = c.alumno_id
WHERE c.estado_ci = 'failed'
GROUP BY a.id
HAVING COUNT(c.id) > 0;SELECT 'cafΓ©' as tipo, usuario FROM cafe_ordenes
UNION ALL
SELECT 'commit' as tipo, usuario FROM commits;SELECT * FROM alumnos
WHERE id IN (
SELECT DISTINCT alumno_id FROM commits
WHERE estado_ci = 'failed'
);WITH sospechosos AS (
SELECT DISTINCT alumno_id FROM cafe_ordenes
WHERE hora = '02:13'
)
SELECT a.nombre FROM alumnos a
WHERE a.id IN (SELECT alumno_id FROM sospechosos);SELECT a.nombre, c.bebida, c.hora
FROM alumnos a
JOIN cafe_ordenes c ON a.id = c.alumno_id
WHERE c.hora = '02:13';
-- Resultado: Wizi, matcha latte, 02:13 π¨SELECT a.nombre, c.rama, c.mensaje
FROM alumnos a
JOIN commits c ON a.id = c.alumno_id
WHERE c.mensaje ILIKE '%chipi%';
-- Resultado: 6 commits con "chipi"SELECT usuario, mensaje FROM discord_logs
WHERE mensaje ILIKE '%chipi%'
ORDER BY fecha DESC;
-- Resultado: Pistas en #general, #dev, #confesionesSELECT a.nombre, d.ip, d.tipo
FROM alumnos a
JOIN dispositivos d ON a.id = d.alumno_id
WHERE d.ip = '192.168.1.109';
-- Resultado: Wizi, desktop, 192.168.1.109- SuperKode A: 4 alumnos (Backend)
- SuperKode B: 4 alumnos (Frontend)
- Los Pato Devs: 4 alumnos (DevOps)
- MaΓ±ana: 6 alumnos
- Tarde: 6 alumnos
- Success: 7 commits
- Failed: 2 commits (π¨)
- Pending: 3 commits
- CafΓ© con leche / latte: 5 Γ³rdenes
- Espresso: 2 Γ³rdenes
- Especiales: 5 Γ³rdenes
| Caso | Query | Tabla Principal |
|---|---|---|
| Listar alumnos por equipo | SELECT + JOIN | alumnos, equipos |
| Encontrar commits sospechosos | WHERE ILIKE | commits |
| AnΓ‘lisis por turno | GROUP BY | alumnos |
| Timeline de eventos | UNION + ORDER BY | cafe_ordenes, commits, discord_logs |
| Sospechosos principales | WHERE + HAVING | commits, cafe_ordenes |
| Correlaciones | Subqueries / CTE | mΓΊltiples tablas |
- β SELECT bΓ‘sico
- β WHERE con diferentes operadores
- β JOIN (INNER, LEFT, UNION)
- β GROUP BY y agregaciones
- β ORDER BY, LIMIT
- β Funciones de string (ILIKE, LENGTH)
- β Funciones de agregaciΓ³n (COUNT, STRING_AGG)
- β Subqueries y CTEs
- β Window functions
- β Γndices y optimizaciΓ³n
Para dudas sobre SQL o el proyecto:
- Revisa el README principal
- Lee los comentarios en
db/00_schema.sql - Examina las pistas en
challenges/ - Consulta 00_COMIENZA_AQUI.md
- Pregunta a MamΓ‘ Pato π¦ (ella niega haberlo visto todo)
ΒΏListos para resolver el caso? π
Todos los datos estΓ‘n aquΓ.
La verdad estΓ‘ en tus queries.
Chipi te espera.
β root_but_intern