#mysql #sql
#mysql #sql
Вопрос:
В таблице правонарушений содержится информация о совершенных преступлениях. Я пытаюсь выяснить, в каком финансовом квартале (1,2,3,4) было совершено наибольшее количество преступлений.
SELECT financialquarter_ID, SUM(numberOfOffences) FROM offences WHERE financialquarter_ID = 1;
этот запрос выдает 4160
SELECT financialquarter_ID, SUM(numberOfOffences) FROM offences WHERE financialquarter_ID = 2;
Этот запрос выдает 4227
SELECT financialquarter_ID, SUM(numberOfOffences) FROM offences WHERE financialquarter_ID = 3;
Этот запрос выдает 4647
SELECT financialquarter_ID, SUM(numberOfOffences) FROM offences WHERE financialquarter_ID = 4;
Этот запрос выдает 4665
Итак, мы видим, что в 4 квартале наибольшее количество преступлений. Я пытаюсь получить запрос для вывода идентификатора этого financialquarter_ID (квартал 4).
До сих пор я безуспешно пытался выполнить следующий запрос.
select yt.financialquarter_ID, yt.numberOfOffences
From offences yt
where numberOfOffences =
(select max(numberOfOffences) from offences st where yt.financialquarter_ID = st.financialquarter_ID)
GROUP by numberOfOffences DESC
LIMIT 1
Ответ №1:
Используйте group by
и limit
:
SELECT financialquarter_ID, SUM(numberOfOffences)
FROM offences
GROUP BY financialquarter_ID
ORDER BY SUM(numberOfOffences) DESC
LIMIT 1;
Примечание: в случае связей это возвращает только одну строку.
Ответ №2:
это будет работать:
SELECT financialquarter_ID, SUM(numberOfOffences) FROM offences group by
financialquarter_ID
having SUM(numberOfOffences)=(SELECT count(*) FROM offences group by
financialquarter_ID order by
count(*) desc limit 1
);