2017-11-14 4 views
1

ダミーの例を使用して、暗黙の欠損値を持つデータセットを完成させる必要があります。これはtidyrの機能completeを使用してRで自明です。tidyrのcomplete()をSQLで実装する方法は?

library(tidyr) 

df <- data.frame(Borough = c('Brooklyn', 'Brooklyn', 'Queens'), 
       Crime = c('Robbery', 'Homicide', 'Drug'), 
       Count=c(1, 2, 1)) 

> df 
    Borough Crime Count 
1 Brooklyn Robbery  1 
2 Brooklyn Homicide  2 
3 Queens  Drug  1 

#Complete implicit missing values 

> complete(df, Borough, Crime, fill=list(Count=0)) 
    Borough Crime Count 
1 Brooklyn  Drug  0 
2 Brooklyn Homicide  2 
3 Brooklyn Robbery  1 
4 Queens  Drug  1 
5 Queens Homicide  0 
6 Queens Robbery  0 

しかし、非常に大きなとOracleのSQLテーブルに格納されている実データは、どのようにこれはSQLクエリを使用して行うことができるという場合は?

答えて

4

クロスは、犯罪と別個のボローを結び、残った行を0カウントで取得するために元のテーブルと結合します。

select b.borough,c.crime,coalesce(t.count,0) as count 
from (select distinct borough from tbl) b 
cross join (select distinct crime from tbl) c 
left join tbl t on t.borough=b.borough and t.crime=c.crime 
+0

は完全に動作します。 – Mihael

関連する問題