利用两个表上的关系获取最大值

9gm1akwq  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(233)

使用postgresql,我必须构建两个名为country和neighbor的表。这是我写的问题。

CREATE TABLE country (
    cid         INTEGER     PRIMARY KEY,
    cname       VARCHAR(20) NOT NULL,
    height      INTEGER     NOT NULL,
    population  INTEGER     NOT NULL
);

CREATE TABLE neighbour (
    country     INTEGER     REFERENCES country(cid) ON DELETE RESTRICT,
    neighbor    INTEGER     REFERENCES country(cid) ON DELETE RESTRICT, 
    length      INTEGER     NOT NULL,
    PRIMARY KEY(country, neighbor)
);

现在我想问的问题是,对于每个国家,我必须找到一个海拔最高的邻国。我要报告它的身份和名字
我必须得到国家的身份证和名称和它的邻国的身份证和最高海拔点的名称。

SELECT country.cid,country.cname,foo.cid,foo.cname
from country,(SELECT cid,cname
from country
    join neighbour
        on country.cid = neighbour.neighbor) as foo
group by country.cid, country.cname, foo.cid, foo.cname;

这就是我所做的,但是我不知道在哪里添加max()子句来找到最高的高程点。

gkl3eglg

gkl3eglg1#

可以对以下对象使用联接和互异:

select distinct on (c1.cid, c1.cname)
    c1.cid, 
    c1.cname, 
    c2.cid neighbour_cid, 
    c2.cname, neighbour_name
from country c1
inner join neighbour n on n.cid = c1.cid
inner join country c2 on c2.cid = n.neighbour
order by c1.cid, c1.cname, c2.height desc

对于每个国家,查询都通过桥表跟踪关系 neighbour 表和,通过加入恢复所有邻居 country 第二次。那么, distinct on 与最伟大的人保持亲密关系 height 只是。

相关问题