我试图将这两个SQL语句组合成一个语句。 首先,它是一个关于航空公司的数据库 路线,乘客,飞机,时刻表和预订表。
婴儿票价为50美元,而成人票价为251美元。 飞行路线共有15名成人和3名婴儿(RTI-005,Kota Kinabalu - Singapore)。
现在我正在尝试编写一个选择语句,该语句将显示根据路线(来源/目的地)生成的总收入,并且它将被分成"成人票价"和"婴儿票价" (出生于2015年至2017年之间)以下是两个选择语句的示例:https://i.gyazo.com/755c34da6d58714efbce4a6c7373c563.png
以下是两个选择语句:
SELECT R.route_id, R.origin "Origin", R.destination "Destination",
TO_CHAR(SUM(R.infant_ticket_price), 99999999.99) "Infant ticket"
FROM Reservation Re, Schedule S, Route R, Passenger P
WHERE P.passenger_id = Re.passenger_id AND Re.flight_no = S.flight_no AND
S.route_id = R.route_id
AND P.date_of_birth BETWEEN '01-JAN-2015' AND '31-DEC-2017'
GROUP BY R.route_id, R.origin, R.destination
ORDER BY R.route_id;
SELECT R.route_id, R.origin "Origin", R.destination "Destination",
TO_CHAR(SUM(R.adult_ticket_price), 99999999.99) "Adult ticket"
FROM Reservation Re, Schedule S, Route R, Passenger P
WHERE P.passenger_id = Re.passenger_id AND Re.flight_no = S.flight_no AND
S.route_id = R.route_id
AND P.date_of_birth NOT BETWEEN '01-JAN-2015' AND '31-DEC-2017'
GROUP BY R.route_id, R.origin, R.destination
ORDER BY R.route_id;
答案 0 :(得分:1)
考虑条件聚合,将WHERE
子句移动到CASE
中的SELECT
语句中。并且使用显式连接而不是隐含,因为您使用的是25年前引入的ANSI标准。
SELECT R.route_id, R.origin "Origin", R.destination "Destination",
TO_CHAR(SUM(CASE WHEN P.date_of_birth BETWEEN '01-JAN-2015' AND '31-DEC-2017'
THEN R.infant_ticket_price
ELSE 0
END), 99999999.99) "Infant ticket",
TO_CHAR(SUM(CASE WHEN P.date_of_birth NOT BETWEEN '01-JAN-2015' AND '31-DEC-2017'
THEN R.adult_ticket_price
ELSE 0
END), 99999999.99) "Adult ticket"
FROM Reservation Re
INNER JOIN Passenger P ON P.passenger_id = Re.passenger_id
INNER JOIN Schedule S ON Re.flight_no = S.flight_no
INNER JOIN Route R ON S.route_id = R.route_id
GROUP BY R.route_id, R.origin, R.destination
ORDER BY R.route_id;
答案 1 :(得分:0)
由于您在GROUP BY
中使用了相同的列,因此您只能使用一个查询。
SELECT R.route_id, R.origin "Origin", R.destination "Destination",
TO_CHAR(SUM(R.infant_ticket_price), 99999999.99) "Infant ticket",
TO_CHAR(SUM(R.adult_ticket_price), 99999999.99) "Adule ticket"
FROM Reservation Re, Schedule S, Route R, Passenger P
WHERE P.passenger_id = Re.passenger_id AND Re.flight_no = S.flight_no AND
S.route_id = R.route_id
AND P.date_of_birth BETWEEN '01-JAN-2015' AND '31-DEC-2017'
GROUP BY R.route_id, R.origin, R.destination
ORDER BY R.route_id;