MySQL: Как получить количество событий, произошедших в течение 24 часов, используя ТОЛЬКО COUNT () и БЕЗ использования предложения WHERE

#mysql #sql #count

#mysql #sql #count

Вопрос:

Это мой сценарий:

Я собираю IP-адреса клиентов, осуществляющих пинг моего сервера, а также время пинга в MySQL.

 Columns:
IP_address, Time_of_Ping(date - hr - min - sec)
  

В любой данный момент времени я хочу знать, сколько клиентов связались с моим сервером за последние 24 часа.

Пожалуйста, обратите внимание: Я знаю, что это можно сделать с помощью простого оператора select с предложением where.

Но почему я публикую это на форуме, просто чтобы знать: можно ли это сделать с помощью just count () Я имею в виду просто записать некоторое условие в count () и без использования предложения where?

Заранее спасибо

Ответ №1:

Вы могли бы воспользоваться тем, что MySQL обрабатывает логические выражения как 1 или 0 в числовом контексте и использовать SUM :

 SELECT SUM(Time_of_Ping > NOW() - INTERVAL 24 HOUR)
FROM your_table
  

Ответ №2:

Я думаю, вы хотите:

 select count(*) as num_pings, count(distinct ip_address) as num_ips
from t
where time_of_ping > now() - interval 24 hour;
  

Обратите внимание, что count(*) это количество пингов. count(distinct) это количество разных IP-адресов, чего, я думаю, вы действительно хотите.

Комментарии:

1. Спасибо за ваш ответ, ценю! Но то, что я написал, это то, что я уже знаю, как получить количество, используя предложение WHERE. Чего я хочу, так это при написании некоторого условия внутри count() и БЕЗ использования WHILE я могу получить количество в 1 линейном запросе

Ответ №3:

Я получил ожидаемый запрос, и он работает нормально:

 select count(ping_time > datetime('now', '-24 hours')) from testTable