我在Oracle 11g数据库中具有以下表:
CREATE TABLE travels
(
Day DATE,
Flight_Code VARCHAR2(7),
Airplane_Code VARCHAR2(7),
CONSTRAINT pk PRIMARY KEY(day,flight_code)
);
和
CREATE TABLE boardings
(
Passport VARCHAR2(7),
Day DATE,
Flight_Code VARCHAR2(7),
Luggage_Weight NUMBER(4,2),
CONSTRAINT pk PRIMARY KEY(passport,day,flight_code)
);
因此,我尝试进行查询,以查看每架飞机所运送的最大重量(Day和Flight_Code)是否为最大重量,该重量始终大于100(请注意,相同的航班,例如RY-1234-VY,可以在不同的日子进行不同的旅行,但同一天最多可以旅行一次。]
我一直在尝试类似的方法,但是它不起作用,因为它是在每次飞行后返回的,这是运输更多Luggage_Weight的那天,以及完成该任务的飞机。
SELECT Airplane_Code, Day, Flight_Code
FROM Travels
WHERE (Day, Flight_Code) IN (SELECT Day, Flight_Code
FROM boardings b1
GROUP BY Day, Flight_Code
HAVING SUM(Luggage_Weight) = (SELECT MAX(SUM(Luggage_Weight))
FROM boardings b2
WHERE b1.Flight_Code = b2.Flight_Code
GROUP BY Day, Flight_Code
HAVING SUM(Luggage_Weight) > 100))
GROUP BY Airplane_Code, Day, Flight_Code;
您可以如下使用分析函数ROW_NUMBER
:
SELECT Flight_Code, Airplane_Code, Day
FROM
(SELECT T.Airplane_Code, T.Day, T.Flight_Code,
ROW_NUMBER() OVER (PARTITION BY T.Flight_Code
ORDER BY B.Luggage_Weight DESC) AS RN
FROM Travels T JOIN boardings B ON B.Flight_Code = T.Flight_Code
WHERE B.Luggage_Weight >= 100)
WHERE RN = 1;