Postgresq: подзапрос и математика - PullRequest
0 голосов
/ 02 мая 2020

Я работаю над набором данных с информацией о зарегистрированных арестах, и мне нужно найти ответ на этот вопрос:

Сколько арестов произошло между 12 и 4 часами утра в 2018 году? Какой процент арестов произошел за эти часы по сравнению со всем 24-часовым периодом?

Мне удалось выяснить, сколько арестов было произведено за этот период с помощью:

select count(reportid)
from arrests 
where adate::varchar like ‘%2018%’
and tim between ‘0000’ and ‘0400’;

Но я не знаю, как go создать подзапрос, чтобы выяснить, что процент, который будет сравниваться со всем 24-часовым периодом.

Я новичок в sql и буду признателен за любую помощь. Также, пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

1 Ответ

0 голосов
/ 02 мая 2020

Вам не нужен подзапрос:

select
    sum(case when tim between '0000' and '0400' then 1 else 0 end) as early_hours_count,
    sum(case when tim between '0000' and '0400' then 1 else 0 end) * 100 / count(*) as ealry_hours_percentage
from arrests 
where extract(year from adate) = '2018'

Вместо подсчета строк после применения фильтра, этот вычисляет сколько путем суммирования 1 если арест произошел между 0:00 и 4:00 или 0 в противном случае.

Обратите внимание также на более простой подход к фильтрации предложений where для года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...