我有一个关于航班的数据集,我很想找出乘坐同一航班的成对乘客。假设在所有排期中只有Row是唯一的,这意味着如果排1在10号航班中被占用,那么它就不会出现在11号航班中。
即。在下面查看示例数据。
但是,如果有3个人坐在同一排坐同一架飞机,那么我想忽略他们,这样我就只算对,而不是3个人。
这是示例数据:
Passenger Flight_Number Row
1 10 1
2 10 1
3 10 3
4 11 5
1 11 5
2 11 6
3 11 7
1 12 2
2 12 2
3 12 2
给出了代码:
CREATE TABLE flight
(
Passenger INT NOT NULL,
Flight_Number INT NOT NULL,
Row_Number INT NOT NULL
);
INSERT INTO flight
VALUES(1, 10, 1),(2, 10, 1),(3, 10, 3),
(4, 11, 5),(1, 11, 5),(2, 11, 6),
(3, 11, 7),(1, 12, 2),(2, 12, 2),
(3, 12, 2);
我想要的是:
Flight_Number Row Passenger_A Passenger_B
10 1 1 2
11 5 4 1
这里特别说明一下,因为12号航班的同一行有3位乘客,因此我们将其忽略。
到目前为止,我的想法是:
SELECT Passenger, Flight_Number, Row_Count
FROM flight RIGHT OUTER JOIN
(SELECT Row, COUNT(*) AS Row_Count FROM flight GROUP BY Row) AS Count
WHERE Row_Count = 2 AND...
有什么帮助我继续下去吗?即。如何获得乘客_A和乘客_B等?
谢谢您的宝贵时间。
最佳答案
试试看:
SELECT DISTINCT
a.Flight_Number,a.Row_Number,
f1.Passenger as Passenger_A,
f2.Passenger as Passenger_B
FROM (
select Flight_Number,Row_Number from flight
group by Flight_Number,Row_Number having count(*)=2
) a
join flight f1
on (f1.Flight_Number=a.Flight_Number and f1.Row_Number=a.Row_Number)
join flight f2
on (f2.Flight_Number=a.Flight_Number and f2.Row_Number=a.Row_Number)
where f1.Passenger>f2.Passenger
最后一个条件消除了重复的对,并且使乘客与他自己耦合。
关于mysql - MySQL计数,融化(重塑)变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19812618/