我在想能否得到关于这个 SQL 查询的帮助。这是一个我没有通过的测试,现在想要学习它。我花了很多时间在上面,看了 SQL 的教程,但我仍然不知道该怎么写它。
有两个表(flights,occupation_flights)记录了航班信息,任务是:编写一个查询,列出未来7天的航班清单,并显示航班、可用座位数、已占用座位数和已占用座位的百分比。
(PLACES显示每个航班提供的座位数)
当SEAT为空时,这意味着某人尚未发出机票。 测试数据 我认为要获得可用座位数,应该将每个航班和日期的乘客不为空的情况相加,并从PLACES中提取。所以我从以下内容开始:
但它还没有完成,因为我真的不明白如何让他同时按航班和日期分组计算,因为有相同航班号但在不同日期进行的航班。我也无法访问表格,这个测试是纸质的,只能展示你知道如何编写SQL查询语句。非常感谢您的帮助!
有两个表(flights,occupation_flights)记录了航班信息,任务是:编写一个查询,列出未来7天的航班清单,并显示航班、可用座位数、已占用座位数和已占用座位的百分比。
FLIGHTS:
FLIGHT ID_COMPANY DATE ORIGIN DESTINATION PLACES
1003 D3 20/01/2006 MADRID LONDRES 40
1007 AF 20/01/2006 PARIS MALAGA 12
1003 15 30/01/2006 MADRID LONDRES 20
1007 AF 30/01/2006 PARIS MALAGA 17
(PLACES显示每个航班提供的座位数)
OCCUPATION_FLIGHTS:
FLIGHT ID_COMPANY DATE PASSENGER SEAT
1003 IB 20/01/2006 07345128H 01V
1003 IB 20/01/2006 1013456213 01P
1003 IB 20/01/2006 08124356C 02V
1003 IB 20/01/2006 57176355K 02P
1007 AF 20/01/2006 27365138A
1003 IB 30/01/2006 734512811 01V
1003 IB 30/01/2006 1013456213 02V
1003 IB 30/01/2006 57176355K
当SEAT为空时,这意味着某人尚未发出机票。 测试数据 我认为要获得可用座位数,应该将每个航班和日期的乘客不为空的情况相加,并从PLACES中提取。所以我从以下内容开始:
SELECT
f.flight,
f.places - (SELECT (CASE WHEN of.passanger IS NOT NULL THEN 1 ELSE 0 END)
FROM occupation_flights AS of GROUP BY of.flight, of.date) AS available,
f.places - (SELECT (CASE WHEN of.passanger IS NULL THEN 1 ELSE 0 END) FROM occupation_flights AS of GROUP BY of.flight, of.date) AS occupied,
100.0 * ((f.places - (SELECT (CASE WHEN of.passanger IS NOT NULL THEN 1 ELSE 0 END) FROM occupation_flights AS of GROUP BY of.flight, of.date)) / f.places AS %occupied
FROM flights AS f
JOIN occupation_flights AS of ON f.flight=of.flight
WHERE f.date BETWEEN DateAdd(DD,-7,GETDATE() ) and GETDATE()
GROUP BY f.flight
但它还没有完成,因为我真的不明白如何让他同时按航班和日期分组计算,因为有相同航班号但在不同日期进行的航班。我也无法访问表格,这个测试是纸质的,只能展示你知道如何编写SQL查询语句。非常感谢您的帮助!