CASE SQL оператор - PullRequest
       3

CASE SQL оператор

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

Мне любопытно, если кто-нибудь скажет мне, что я делаю неправильно, или укажет мне правильное направление.Если кто-то может мне помочь, я был бы благодарен.

Вот вопрос: Используя таблицу веб-журнала в вашей базе данных, создайте запрос, который сгруппирует IP-адреса и отобразит сумму количества запросов по каждому IP-адресу, который получил возвраткод (retcode) больше 300, упорядочите этот запрос по полю retcode в порядке убывания.

Вот что у меня есть:

SELECT COUNT(ipno) AS Number_of_Requests, retcode
FROM WebLog
GROUP BY ipno
HAVING retcode > 300
ORDER BY retcode DESC

Ответы [ 2 ]

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

Вопрос в основном "неправильный". Проблема в том, что он запрашивает результаты на уровне ip, а затем запрашивает заказ по коду возврата. Но у данного IP может быть несколько кодов возврата, соответствующих критериям.

Одна правильная интерпретация заключается в том, что это действительно означает «группировать по ip и retcode»:

SELECT ipno, retcode, COUNT(ipno) AS Number_of_Requests
FROM WebLog
WHERE retcode) > 300
GROUP BY ipno
ORDER BY retcode DESC;

Другая правильная интерпретация заключается в том, что это означает заказ по максимальному ретрокоду для каждого IP:

SELECT ipno, COUNT(ipno) AS Number_of_Requests
FROM WebLog
WHERE retcode > 300
GROUP BY ipno
ORDER BY MAX(retcode) DESC;

Для этого запроса я бы включил GROUP_CONCAT(DISTINCT retcode), чтобы увидеть список таких кодов.

Если честно, я подозреваю, что запись вопроса, предназначенного для ORDER BY, будет соответствовать количеству записей в журнале, и формулировка только что вышла из строя.

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

Вам нужно переместить предложение фильтра на where. Кроме того, не имеет смысла сортировать по коду при группировании по IP.

Если вы действительно хотите это сделать, используйте функцию агрегирования в коде возврата (скажем, max):

SELECT ipno, COUNT(ipno) AS Number_of_Requests, max(retcode)
FROM WebLog
where retcode > 300
GROUP BY ipno
ORDER BY max(retcode) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...