0

私はアマチュアで、彼の課題の最後の質問を終わらせようとしています (この時点で期限が過ぎており、理解を求めているだけです) 座って、2 日間にわたってほぼ 5 時間、これを試みましたが、成功しませんでした。

さまざまな種類の結合をすべて調べてみましたが、グループ化を機能させることができず (これまで)、並べ替えもほとんどうまくいきませんでした。これらすべてを一度に行うことはできますが、ここでの難しさは、これらすべてを組み合わせて機能させることでした。

これは質問です:

2 つ以上のフライトがあるすべての出発地と目的地のペアについて (出発地の都市、ソース コード、目的地の都市、目的地コード、およびフライト数) を含むリストを取得する SQL クエリを記述します。number_of_flights で並べ替えます。「flights」テーブルの「dest」属性と「source」属性は、どちらも「airports」テーブルの「airportid」を参照していることに注意してください。

これが私が使用しなければならないテーブルです(約3000行のダミーエントリも付属しています)

create table airports (
    airportid char(3)       primary key, 
    city varchar(20)
);
create table airlines (
    airlineid char(2)       primary key, 
    name varchar(20), 
    hub char(3)             references airports(airportid)
); 
create table customers (
    customerid char(10)     primary key, 
    name varchar(25), 
    birthdate date, 
    frequentflieron char(2) references airlines(airlineid)
);
create table flights (
    flightid char(6)        primary key, 
    source char(3)          references airports(airportid), 
    dest char(3)            references airports(airportid), 
    airlineid char(2)       references airlines(airlineid), 
    local_departing_time date, 
    local_arrival_time date
);
create table flown (
    flightid char(6)        references flights(flightid), 
    customerid char(10)     references customers, 
    flightdate date
);

私が遭遇した最初の問題は、同じクエリで airports.city を 2 回出力することでしたが、結果は異なりました。それだけでなく、グループ化するときに何を試しても、常に同じ結果が得られます。

GROUP BY 式ではありません

通常、私はこれらをつなぎ合わせて楽しんでいますが、これはイライラしています. ヘルプ!

4

2 に答える 2

5
select source.airportid as source_airportid,
       source.city source_city,
       dest.airportid as dest_airportid,
       dest.city as dest_city,
       count(*) as flights
from   flights
inner join airports source on source.airportid = flights.source
inner join airports dest on dest.airportid = flights.dest
group by
       source.airportid,
       source.city,
       dest.airportid,
       dest.city
having count(*) >= 2
order by 5;
于 2012-04-17T20:39:40.190 に答える
4

サブクエリは試しましたか?

SELECT  source_airports.city, 
        source_airports.airportid,
        dest_airports.city,
        dest_airports.airportid,
        x.number_of_flights
FROM 
    (
        SELECT  source, dest, COUNT(*) as number_of_flights
        FROM    flights 
        GROUP BY source, dest
        HAVING COUNT(*) > 1
    ) as x
    INNER JOIN airports as dest_airports
    ON dest_airports.airportid = x.dest
    INNER JOIN airports as source_airports
    ON source_airports.airportid = x.source
ORDER BY x.number_of_flights ASC
于 2012-04-17T20:42:31.903 に答える