连接多个表,包括两个表,并通过计算组进行排序

Sco*_*t C 0 sql oracle group-by count

我是一名业余爱好者,只是试图完成他的任务的最后一个问题(现在已经过期了,只是在寻找理解)我坐了两次,并且在两天内尝试了近5个小时,并且没有成功.

我已经尝试查看所有不同类型的连接,无法分组工作(永远)并且也没有运气排序.我可以一次完成所有这些事情,但这里的困难在于让所有这些事情都能在工会中发挥作用.

这是个问题:

编写SQL查询以检索具有至少2个航班的所有source-dest对的列表(源城市,源代码,目的地城市,目的地代码和航班数).按number_of_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
);
Run Code Online (Sandbox Code Playgroud)

我遇到的第一个问题是在同一个查询中输出两次airport.city但结果不同.不仅如此,无论我在分组时尝试过什么,我都会得到相同的结果:

不是GROUP BY表达式

通常我很乐意尝试将这些拼凑在一起,但这令人沮丧.救命!

小智 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;
Run Code Online (Sandbox Code Playgroud)