我有两张桌子
表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
在这里,我没有得到任何元组。我想我几乎明白了为什么,但我无法解决它。
希望有人了解我,可以提供帮助!
答案 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
更具可读性