我的nycgrid表具有以下架构id,x1,x2,y1,y2。它看起来像以下示例:

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


另一个表nyccrash包含元组,其中包含有关从1989年到2007年发生的汽车事故的信息(总计12000条记录)。第一个属性是crash_year,其次是事故类型,天气状况等,并以x_coordinate和y_coordinate结尾,其中纽约发生了车祸。

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


这是我先前在stackoverflow上问过的扩展问题。


  我试图找到方形网格(Grid ID),使它们具有
  与1989年相比,2007年发生的车祸减少了。大约有100起
  nycgrid表中的行。我只需要那些行数少的行
  与1989年相比,2007年发生了事故。
  
  第二部分,可能更容易些的是如何找到
  每个方格(nycgrid.id)造成的车祸次数是多少?其他
  话说,如何显示每个网格ID发生了多少次崩溃?每
  崩溃具有关联的x和y坐标。每个网格都有一个x1-x2-y1-y2
  组成正方形的坐标。

最佳答案

RBarryYoung's answer开始到您的最后一个问题,我们仅使用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

08-28 08:24