Postgres通过WHERE和其他表中的COUNT找到元组

时间:2016-04-07 16:54:18

标签: sql postgresql group-by postgresql-9.4

我有两张桌子

表a
ID
标题

表格b
ID
a.id引用a(id)

我希望获得所有元组的头衔,年份和数量()(年份)。我无法让它发挥作用。

我可以将它们分开,但每当我添加WHERE子句时它都会失败。

select title, year, count(*)  
from a inner join b on a.id = b.a_id  
group by title, year 

这样的东西会给我带有标题年份和计数的列表。如果我尝试添加WHERE子句

select title, year, count(*)  
from a inner join b on a.id = b.a_id  
where year = (select max(year) from a)  
group by title, year  

在这里,我没有得到任何元组。我想我几乎明白了为什么,但我无法解决它。

希望有人了解我,可以提供帮助!

1 个答案:

答案 0 :(得分:0)

怎么样?

WITH a_max_years AS (
  SELECT id
    FROM a
    WHERE year = (SELECT max(year) FROM a)
)
SELECT a.title, a.year, count(1)
  FROM a
    INNER JOIN b ON b.a_id = a.id
    INNER JOIN a_max_years.id = a.id
  GROUP BY b.a_id;

或:

WITH b_counts AS (
  SELECT a_id, count(1) as cnt
    FROM b
    GROUP BY a_id
)
SELECT a.title, a.year, b_counts.cnt
  FROM a
    INNER JOIN b_counts ON b_counts.a_id = a.id
  WHERE a.year = (SELECT max(year) FROM a);

你也可以将它们写成INNER JOIN (SELECT ...) a_max_years,但WITH更具可读性