-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathej06_PasajerosDeVuelos.sql
179 lines (149 loc) · 3.98 KB
/
ej06_PasajerosDeVuelos.sql
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
-- crear base de datos
create database ej6_PasajerosDeVuelos;
-- usar la base de datos
use ej6_PasajerosDeVuelos;
-- crear tablas
create table vuelo
(
nroVuelo int not null,
desde varchar(30) not null,
hasta varchar(30) not null,
fecha date not null,
primary key(nroVuelo, desde)
);
create table avion_utilizado
(
nroVuelo int not null,
tipoAvion varchar(20) not null,
nroAvion int not null,
primary key(nroVuelo),
foreign key(nroVuelo) references vuelo(nroVuelo)
);
create table info_pasajeros
(
nroVuelo int not null,
documento int not null,
nombre varchar(30) not null,
origen varchar(30) not null,
destino varchar(30) not null,
primary key(nroVuelo, documento),
foreign key(nroVuelo) references vuelo(nroVuelo)
);
-- consultas
-- 1
select v.nroVuelo from vuelo v
where v.desde = 'A' and v.hasta = 'F';
-- 2
create view vueloQueNoPasaPorB
as
select v.nroVuelo from vuelo v
where v.desde <> 'B' and v.hasta <> 'B';
select distinct a.tipoAvion
from avion_utilizado a
inner join vueloQueNoPasaPorB v on a.nroVuelo = v.nroVuelo;
-- 3
select ip.nroVuelo, ip.documento, ip.nombre
from info_pasajeros ip, info_pasajeros ip2
where ip.origen = 'A' and ip.destino = 'B'
and ip2.origen = 'B' and ip2.destino = 'D';
-- 4
create view vueloQuePasaPorC
as
select v.nroVuelo from vuelo v
where v.desde = 'C' or v.hasta = 'C';
select distinct a.tipoAvion
from avion_utilizado a
left join vueloQuePasaPorC v on a.nroVuelo = v.nroVuelo;
-- 5
select a.nroVuelo, count(*) as cantidadVuelos
from avion_utilizado a
group by a.nroAvion;
-- 6
create view vueloConDestinoH
as
select v.nroVuelo from vuelo v
where v.hasta = 'H';
select a.tipoAvion, a.nroAvion
from avion_utilizado a
left join vueloConDestinoH v on a.nroVuelo = v.nroVuelo;
-- 7
create view vuelosUltimoAño
as
select v.nroVuelo from vuelo v
where v.fecha between dateAdd(month, -1, getDate()) and getDate();
create view vuelosPorPasajeroUltimoAño
as
select ip.documento, count(*) as cantidadVuelos
from info_pasajeros ip
inner join vuelosUltimoAño v on ip.nroVuelo = v.nroVuelo
group by ip.documento;
select vpp.documento from vuelosPorPasajeroUltimoAño vpp
where vpp.cantidadVuelos = (
select max(v.cantidadVuelos) from vuelosPorPasajeroUltimoAño v
);
-- 8
create view vuelosEnB777
as
select a.nroVuelo from avion_utilizado a
where a.tipoAvion = 'B-777';
create view vuelosEnB777PorPasajero
as
select ip.documento, count(*) as cantidadVuelos
from info_pasajeros ip
inner join vuelosEnB777 v on ip.nroVuelo = v.nroVuelo
group by ip.documento;
select v.documento from vuelosEnB777PorPasajero v
where v.cantidadVuelos = (
select max(vv.cantidadVuelos) from vuelosEnB777PorPasajero vv
);
-- 9
create view vueloMasAntiguo
as
select v.nroVuelo from vuelo v
where v.fecha <= all (
select v.fecha from vuelo v
);
create view cantVuelosPasajeroMasAntiguo
as
select ip.documento, count(*) as cantidad
from info_pasajeros ip
inner join vueloMasAntiguo v on ip.nroVuelo = v.nroVuelo
group by ip.documento;
create view vuelosPasajeroMasAntiguo
as
select ip.nroVuelo from info_pasajeros ip
inner join cantVuelosPasajeroMasAntiguo cv
on ip.documento = cv.documento
group by ip.documento
having count(*) = (
select max(cv.cantidad) from cantVuelosPasajeroMasAntiguo cv
);
select distinct a.nroAvion
from vuelosPasajeroMasAntiguo v
inner join avion_utilizado a on v.nroVuelo = a.nroVuelo;
-- 10
create view pasajerosPorVuelo
as
select ip.nroVuelo, count(*) as pasajeros
from info_pasajeros ip
group by ip.nroVuelo;
select a.nroAvion, avg(ppv.pasajeros)
from avion_utilizado a
inner join pasajerosPorVuelo ppv
group by a.nroAvion;
-- 11
create view vuelosPorPasajero
as
select ip.documento, count(*) as vuelos
from info_pasajeros ip
group by ip.documento;
create function promedio()
returns float
as
begin
declare @promedio float
set @promedio = avg(vpp.vuelos) from vuelosPorPasajero vpp
return @promedio
end;
select vpp.documento from vuelosPorPasajero vpp
where vpp.vuelos between promedio() - 0.1 * promedio() and promedio() + 0.1 * promedio();