2015-01-20 4 views
0

Скажем, у нас есть таблица "преступления", который имеет 2 колонки "activitydate" (метки времени без временной зоны) и "ZipCode" (характер изменения (5))Как вычислить процент, используя SQL (postgresql)?

например: стол "преступления":

activity date    zipcode 
2014-11-22 00:52:00   12345 
2014-10-22 00:52:00   12345 
2014-10-24 00:52:00   12345 
2014-12-22 00:52:00   54321 
... 

С учетом даты начала, даты окончания и почтового индекса, как вычислить процентные коды почтовых индексов, которые имеют большее количество преступлений за данный период, чем текущий почтовый индекс?

+0

Как бы вы сделать это без SQL? Просто напишите в тексте и переведите на SQL. –

ответ

0

Ниже приведен быстрый и неприятный способ получить количество zipcodes, у которых больше счетчика, чем предоставленный почтовый индекс. Затем вы можете использовать это, чтобы получить процент. (Существует, вероятно, более эффективный способ, чтобы получить его, хотя)

SELECT COUNT(zipcode) as numberAbove 
    FROM (SELECT 
      zipcode 
     FROM 
      crime 
     WHERE 
      activitydate >= '<START DATE>' 
     AND 
      activitydate < '<END DATE>' 
     GROUP BY 
      zipcode 
     HAVING 
      COUNT(zipcode) > (select COUNT(zipcode) 
           from crime 
           where zipcode = '<ZIP CODE TO USE>' 
           and activitydate >= '<START DATE>' 
           and activitydate < '<END DATE>')) subq; 

sqlfiddle = http://sqlfiddle.com/#!15/9e5f3/23

Смежные вопросы