SQL:高级查询
问题描述:
我一直在尝试几个小时来解决网页中的练习(自学sql),但我无法正确执行练习。SQL:高级查询
这是我走到这一步,
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
我得到一个错误,因为r.qty没有在GROUP BY子句包括在内。我觉得我越来越近,但我不能 –
再试一次,只是修改了 – sunysen
它既不工作也不工作,我得到同样的错误。 'r.qty'正在HAVING中使用,因此它需要包含在GROUP BY子句中。 –