0

次の schema を持つ私のnycgridテーブルid,x1,x2,y1,y2。次の例のようになります。

22,910000,920000,120000,130000
67,930000,940000,170000,180000
171,980000,990000,210000,220000

別のテーブルnyccrashには、1989 年から 2007 年までに発生した自動車事故に関する情報のタプルが含まれています (合計 12,000 レコード)。最初の属性はcrash_yearで、その後に事故の種類、気象条件などが続き、x_coordinatey_coordinateで終わり、NYC で自動車事故が発生した場所になります。

2007,2,9,4,1,1028977,202232
2004,1,1,1,4,1012600,214101
2003,1,9,1,1,958775,156149
1999,1,1,1,1,997349,175503

これは、以前にスタックオーバーフローで尋ねた質問の延長に関する質問です。

1989 年よりも 2007 年に発生した自動車事故が少ないような正方形のグリッド (グリッド ID) を見つけようとしています。nycgridテーブルには約 100 行あります。1989 年よりも 2007 年に発生した事故が少ない行のみが必要です。

2 番目の部分は、おそらく少し簡単ですが、各正方形グリッド (nycgrid.id) ごとの自動車事故の数を見つけるにはどうすればよいでしょうか? つまり、各グリッド ID で発生したクラッシュの数をどのように表示するのでしょうか? 各クラッシュには、x 座標と y 座標が関連付けられています。各グリッドには、正方形を構成する x1-x2-y1-y2 座標があります。

4

1 に答える 1

2

最後の質問に対するRBarryYoungの回答から始めて、使用する年にピボットしSUM/CASEて値を比較します

SELECT ID
FROM

    (SELECT  
                grid.ID, 
                SUM(CASE WHEN yearCol = 1989 THEN 1 ELSE 0 END) CrashCount_1989,
                SUM(CASE WHEN yearCol = 2007 THEN 1 ELSE 0 END) CrashCount_2007
    FROM        crashes
    INNER JOIN  grid    
                ON  crashes.x_coordinate BETWEEN grid.x1 AND grid.x2
                And crashes.y_coordinate BETWEEN grid.y1 AND grid.y2
    WHERE       crashes.yearCol IN(1989, 2007)
    GROUP BY    grid.ID) t
WHERE CrashCount_2007 < CrashCount_1989
于 2012-04-05T21:29:08.457 に答える