2017-02-16 5 views
1

私はこのステートメントの私の結果がProject_IDにnullを表示している理由に少し戸惑っています。私は以下の投稿を見て、代わりにinner joinを試しましたが、結果は無益でした。left joinと同じです。私は2つの異なるProject_IDしか持っていません。奇妙な理由のために、Nameは、上記リストから追加されたCountで再び述べられています。なぜこれをやっているのですか?これをどうやって解決できますか?あなたのアドバイスを提供してください。私のSQL構文がnullになるのはなぜですか?

Why does my SQL query return rows with NULL? It should never return rows with NULL

​​

結果:

 Name    Count Maximum Hours Worked Maximum Salary Project_ID 
Hulk Hogan    157   3,500    $432,995.00  LFC 
Hulk Hogan    43   3,499    $550,000.00  PCR 
Hulk Hogan    200   3,500    $550,000.00 (null) 
Andre the Giant   42   5,300    $870,000.00  PCR 
Andre the Giant   42   5,300    $870,000.00 (null) 
Bret Hart    5   3,675    $512,000.00  LFC 
Bret Hart    10   4,193    $716,510.00  PCR 
Bret Hart    15   4,193    $716,510.00 (null) 
Winnie the Pooh   561   5,600    $929,654.00  PCR 
Winnie the Pooh   561   5,600    $929,654.00 (null) 
         1000   5,600    $929,654.00 (null) 
+4

それは 'rollup'からだ - それは' NAME'と 'Project_Id'の各グループの上に凝集体を適用しています要約として。したがって、作業時間と給与からグループの総計 'count'と' max'レコードを取得します。最後のレコードは、セット全体の要約です。 – Siyual

+0

'rollup'を削除しても、私のために各列の合計が出力されません。このステートメントのすべての列に合計を追加する最も実行可能な方法は何ですか? –

+0

残念ながら、私は、サブグループ化をどのようにフィルタリングするかを答えるために、postgresの構文について十分に知りません。 – Siyual

答えて

1

Grouping Sets

select 
    dp.Name,count(dp."Name") Count, 
    max(to_char(ft."Hours",'9,999')) "Maximum Hours Worked", 
    max(ft."Salary"::money) "Maximum Salary", 
    ft."Project_ID" 
from 
    facttable ft 
    left join 
    alldatainput dp on dp."alldatainputpk" = ft."alldatainputfk" 
group by grouping sets ((dp."Name",ft."Project_ID"),()) 
関連する問題