-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconsultas-ejemplo.sql
More file actions
54 lines (49 loc) · 2.03 KB
/
Copy pathconsultas-ejemplo.sql
File metadata and controls
54 lines (49 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* =============================================================================
Consultas de ejemplo sobre la base airline
Ejecutar con:
docker exec -i dab-mssql /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "P@ssw0rd1" -C -d airline -i /tmp/03-consultas-ejemplo.sql
============================================================================= */
USE airline;
GO
-- 1) Factor de ocupación por vuelo
SELECT TOP (10)
v.NumeroVuelo,
v.CapacidadAsientos,
Ocupados = COUNT(r.ReservaId),
Ocupacion = FORMAT(COUNT(r.ReservaId) * 1.0 / v.CapacidadAsientos, 'P1')
FROM dbo.Vuelos AS v
LEFT JOIN dbo.Reservas AS r
ON r.VueloId = v.VueloId AND r.Estado NOT IN (N'Cancelada', N'NoShow')
GROUP BY v.NumeroVuelo, v.CapacidadAsientos
ORDER BY COUNT(r.ReservaId) * 1.0 / v.CapacidadAsientos DESC;
GO
-- 2) Pasajeros frecuentes
SELECT TOP (10)
Pasajero = CONCAT(p.Nombres, ' ', p.Apellidos),
p.Nacionalidad,
Vuelos = COUNT(*),
Gasto = SUM(r.Tarifa),
KgFacturado = (SELECT ISNULL(SUM(e.PesoKg), 0)
FROM dbo.Equipajes e
INNER JOIN dbo.Reservas r2 ON r2.ReservaId = e.ReservaId
WHERE r2.PasajeroId = p.PasajeroId AND e.Tipo <> N'Mano')
FROM dbo.Pasajeros AS p
INNER JOIN dbo.Reservas AS r ON r.PasajeroId = p.PasajeroId
WHERE r.Estado <> N'Cancelada' and p.Nacionalidad='Argentina'
GROUP BY p.PasajeroId, p.Nombres, p.Apellidos, p.Nacionalidad
ORDER BY COUNT(*) DESC, SUM(r.Tarifa) DESC;
GO
-- 3) Carga de equipaje por vuelo (útil para peso y balance)
SELECT TOP (10)
v.NumeroVuelo,
v.Aeronave,
Piezas = COUNT(e.EquipajeId),
PesoBodega = SUM(CASE WHEN e.Tipo <> N'Mano' THEN e.PesoKg ELSE 0 END),
PesoCabina = SUM(CASE WHEN e.Tipo = N'Mano' THEN e.PesoKg ELSE 0 END)
FROM dbo.Vuelos AS v
INNER JOIN dbo.Reservas AS r ON r.VueloId = v.VueloId
INNER JOIN dbo.Equipajes AS e ON e.ReservaId = r.ReservaId
GROUP BY v.NumeroVuelo, v.Aeronave
ORDER BY SUM(CASE WHEN e.Tipo <> N'Mano' THEN e.PesoKg ELSE 0 END) DESC;
GO