2016-04-07 14 views
0

からCOUNT a.idはa(id)Postgresはによってタプルを見つけて、私は2つのテーブル</p> <p><strong>テーブル</strong><br> ID <br> タイトル<br> 年</p> <hr> <p><strong>表B</strong><br> ID <br> を持っている他のテーブル

を参照します。

max(年)を含むすべてのタプルに対してtitle、year、およびcount()を取得したいとします。私はこれを動作させることができません。

私はそれらを別々に行うことができますが、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

ではなく、外部結合試し読みやすくです。私の提案は、 'a'のレコードに対応する' b'のレコードがないことです。 –

+0

私はおそらくタプルも失っていて、外側の結合を試したと考えられ、返されたタプルごとに1を返します。 – CIsHard

答えて

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

+0

最後のクエリでは、WHERE句でゼロタプルが得られます。どこにいなくても、私はタイトル、年、正確な数を持つ完全なリストを取得します。しかし、入力していただきありがとうございます!多分私はここで何か間違っている。 – CIsHard

関連する問題

 関連する問題