我的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