Использование счетчика - PullRequest
0 голосов
/ 21 мая 2018

Поэтому через некоторое время я просто заново знакомлюсь с SQL и использую образец хранилища данных Mode Analytics, где у них есть набор данных для полицейских вызовов SF в 2014 году.

Для справки, он настроен так:

incident_num, category, descript, day_of_week, date, time, pd_district, Resolution, address, ID

Что я пытаюсь сделать, это выяснить общее количество инцидентов для категории и новую колонку всех арестованных людей.В идеале это выглядит примерно так:

Category,  Total_Incidents,  Arrested
-------------------------------------
Battery         10              4
Murder          200             5

Что-то в этом роде.

Пока что я пробовал это:

SELECT category, COUNT (Resolution) AS Total_Incidents, (
    Select COUNT (resolution)
    from tutorial.sf_crime_incidents_2014_01
    where Resolution like '%ARREST%') AS Arrested
from tutorial.sf_crime_incidents_2014_01
group by 1
order by 2 desc

Это возвращает общее количествоинциденты правильно, но для арестованных он продолжает печатать 9014 Арест

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать это:

SELECT category, 
    COUNT(Resolution) AS Total_Incidents, 
    SUM(CASE WHEN Resolution LIKE '%ARREST%' THEN 1 END) AS Arrested
FROM tutorial.sf_crime_incidents_2014_01
GROUP BY category
ORDER BY 2 DESC;
0 голосов
/ 21 мая 2018

Подзапрос не коррелирован.Он просто выбирает количество всех строк.Добавьте условие, которое проверяет, чтобы категория была равна категории внешнего запроса.

SELECT o.category,
       count(o.resolution) total_incidents,
       (SELECT count(i.resolution)
               FROM tutorial.sf_crime_incidents_2014_01 i
               WHERE i.resolution LIKE '%ARREST%'
                     AND i.category = o.category) arrested
       FROM tutorial.sf_crime_incidents_2014_01 o
       GROUP BY 1
...