MySQL Count,Melt(整形)变量

时间:2013-11-06 12:52:37

标签: mysql sql count

我有关于航班的数据集,我很想知道乘坐同一航班的乘客坐在同一排。假设只有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... 

有关我如何继续这个的任何帮助?即。如何获得Passenger_A和Passenger_B等?

感谢您提前抽出时间。

1 个答案:

答案 0 :(得分:1)

尝试一下:

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

最后一个条件消除了重复对以及将乘客与自己联系起来。