SQL:高级查询

问题描述:

我一直在尝试几个小时来解决网页中的练习(自学sql),但我无法正确执行练习。SQL:高级查询

This is the summary

这是我走到这一步,

SELECT p.name, COUNT(trip_no) 
FROM Pass_in_trip AS pit 
INNER JOIN (
    SELECT r.seat as seat, MAX(r.qty) as qty 
    FROM (
     SELECT place AS seat, COUNT(trip_no) AS qty 
     FROM Pass_in_trip 
     INNER JOIN (
      SELECT place AS seat 
      FROM Pass_in_trip 
      GROUP BY place 
      HAVING COUNT(ID_psg) > 1 
     ) AS s 
     ON s.seat = place 
     GROUP BY ID_psg, place 
    ) as r 
    GROUP BY r.seat 
    HAVING MAX(r.qty) > 1 
) as r 
ON place = r.seat 
INNER JOIN Passenger AS p 
ON p.ID_psg = pit.ID_psg 
GROUP BY p.name, p.ID_psg, place, r.qty 
HAVING COUNT(trip_no) = r.qty 

/* This query gives better results than the previous one, however, 
it doesn't pass all tests */ 

SELECT p.name, COUNT(trip_no) 
FROM Pass_in_trip AS pit 
INNER JOIN (
    SELECT r.seat as seat, MAX(r.qty) as qty 
    FROM (
     SELECT place AS seat, COUNT(trip_no) AS qty 
     FROM Pass_in_trip 
     GROUP BY ID_psg, place 
    ) as r 
    GROUP BY r.seat 
    HAVING MAX(r.qty) > 1 
) as r 
ON place = r.seat 
INNER JOIN Passenger AS p 
ON p.ID_psg = pit.ID_psg 
GROUP BY p.name, r.qty 
HAVING COUNT(trip_no) = r.qty 

一些帮助将非常感激查询。 此致敬礼。

尝试

SELECT p.name, COUNT(trip_no) 
FROM Pass_in_trip AS pit 
INNER JOIN (
    SELECT r.seat as seat, MAX(r.qty) as qty 
    FROM (
     SELECT place AS seat, COUNT(trip_no) AS qty 
     FROM Pass_in_trip 
     INNER JOIN (
      SELECT place AS seat 
      FROM Pass_in_trip 
      GROUP BY place 
      HAVING COUNT(ID_psg) > 1 
     ) AS s 
     ON s.seat = place 
     GROUP BY ID_psg, place 
    ) as r 
    GROUP BY r.seat 
    HAVING MAX(r.qty) > 1 
) as r 
ON place = r.seat 
INNER JOIN Passenger AS p 
ON p.ID_psg = pit.ID_psg 
GROUP BY p.name,trip_no 
HAVING COUNT(trip_no) = r.qty 
+0

我得到一个错误,因为r.qty没有在GROUP BY子句包括在内。我觉得我越来越近,但我不能 –

+0

再试一次,只是修改了 – sunysen

+0

它既不工作也不工作,我得到同样的错误。 'r.qty'正在HAVING中使用,因此它需要包含在GROUP BY子句中。 –