Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将表联接到另一个表上的子查询,然后对结果进行排序_Sql_Database_Postgresql_Join - Fatal编程技术网

Sql 将表联接到另一个表上的子查询,然后对结果进行排序

Sql 将表联接到另一个表上的子查询,然后对结果进行排序,sql,database,postgresql,join,Sql,Database,Postgresql,Join,我是新来的,我非常感谢大家对我一整天都在努力解决的问题给予帮助 考虑以下两个表: albums (pkey: id) years (pkey: album_id, year) id genre_id album_id year --- -------- -------- ---- 450 1 450 2000 451

我是新来的,我非常感谢大家对我一整天都在努力解决的问题给予帮助

考虑以下两个表:

         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;

这应该很简单:

SELECT album_id, MAX(year) 
  FROM years
 GROUP BY album_id
 ORDER BY MAX(year) DESC;
聚合函数
max()
允许您选择最近一年。因为您使用的是聚合函数,所以还需要一个
GROUPBY
子句


如果您只需要某一类型的专辑,只需添加
join
语句。

您可能需要的是

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