【问题标题】:Join table to subquery on another table and then sort the results将表连接到另一个表上的子查询,然后对结果进行排序
【发布时间】:2012-11-27 08:34:36
【问题描述】:

我是新来的,对于我整天都在努力解决的问题,我非常感谢一些帮助。

考虑这两个表:

         albums (pkey: id)    years (pkey: album_id, year)

         id   genre_id       album_id  year
         ---  --------       --------  ---- 
         450      1           450      2000
         451      1           450      2001
         452      1           450      2002
         453      2           451      2005
         454      3           451      2012
                              452      1998

这可能看起来很奇怪,但请假设一张专辑可以关联多年。

我想选择流派 1 中的所有专辑,按每张专辑的最新年份排序。 (假设可以按年份排序)。

所以,我想要这个结果:

 id    year
-----  ----
 451   2012
 450   2002
 452   1998

这就是我所在的地方......

显然,我需要在订购结果之前加入表格:

SELECT      id, year
FROM        albums INNER JOIN years ON albums.id = years.album_id
WHERE       genre_id = 1
ORDER BY    year;

这会选择类型 1 中每张专辑的每年记录,而不是类型 1 中每张专辑的最新年份记录。

不知何故,我需要像这样合并一个子查询,以将加入专辑表的年份限制为该专辑的最新年份,然后再次排序:

SELECT year FROM years WHERE album_id = ??? ORDER BY year DESC LIMIT 1;

【问题讨论】:

    标签: sql database postgresql join


    【解决方案1】:
    SELECT   album_id, max(year) latest
    FROM albums INNER JOIN years ON id = album_id
    WHERE genre_id = 1
    GROUP BY album_id
    ORDER BY latest DESC
    

    【讨论】:

      【解决方案2】:

      这应该很简单:

      SELECT album_id, MAX(year) 
        FROM years
       GROUP BY album_id
       ORDER BY MAX(year) DESC;
      

      聚合函数max() 允许您选择最近的一年。由于您使用的是聚合函数,因此您还需要一个group by 子句。

      如果您只需要某种类型的专辑,只需添加join 声明即可。

      【讨论】:

        【解决方案3】:

        你可能想要的是

        select
        a.id,
        ( 
           select max(b.year) from years b where a.id = b.album_id
        ) as year
        from 
        albums a
        where genre_id = 1
        order by year
        

        【讨论】:

          猜你喜欢
          • 2013-10-28
          • 2021-04-29
          • 1970-01-01
          • 1970-01-01
          • 2013-08-09
          • 1970-01-01
          • 2021-09-26
          • 2015-07-29
          • 2016-05-23
          相关资源
          最近更新 更多