我想知道是否可以就此 sql 查询获得一些帮助。它来 self 失败的测试,现在想学习。我在上面花了很多时间,看了有关 sql 的教程,但我仍然不明白它是如何编写的。
有 2 个表(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为空时,表示还没有人出票)。 TEST DATA 我想获得一些可用座位,我应该总结每个航类和日期乘客不空的情况,并从 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 查询。 真的很感激任何见解! 非常感谢!
最佳答案
Mysql符合: SQLFIDDLE
SELECT f.flight,f.mydate,f.places - count(of.seat) as available_seats,
count(of.seat) as occupied,
count(of.seat)/f.places * 100 as percentage_occupied
FROM flights f
JOIN occupation_flights of
ON f.flight = of.flight AND f.mydate = of.mydate
WHERE of.mydate BETWEEN DATE_ADD(CURDATE(), INTERVAL -7 DAY)AND CURDATE()
group by f.flight, f.mydate
关于mysql - 如何编写此 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570289/