#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