【问题标题】:Getting max value using relation on two table使用两个表上的关系获取最大值
【发布时间】:2020-09-22 20:29:32
【问题描述】:

使用 postgresql 我必须建立两个名为 country 和 neighbour 的表。这是我写的查询。

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)
);

现在我想解决的问题是,对于每个国家,我必须找到一个海拔最高的邻国。我必须报告它的id和名字

我必须得到国家的 id 和 name,它是邻国的 id 和 name,海拔最高。

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() 子句来查找最高海拔点。

【问题讨论】:

    标签: sql database postgresql join greatest-n-per-group


    【解决方案1】:

    您可以在以下位置使用连接和区分:

    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 最大的邻居。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2020-03-05
      • 2014-09-14
      相关资源
      最近更新 更多