Дык приведение же типов. Правый аргумент приводится к типу левого аргумента. Т.е. '*' приводится к 0, соответственно становится 0.
И это не только со *, а с чем попало не цифровым. Попробуйте a, b, + и т.д.
Если поле system_name в индекс не попадает, то такой запрос будет full scan, т.е. будет пройдено 100% записей в таблице. Посчитать количество записей в таблице можно с помощью оператора count.
Постановка вопроса несколько странная. По-моему РСУБД никогда не скажет, сколько строк она обработала до получения результата. Более того, «маршрут сканирования» и его порядок в разных условиях будет разным.
Ну тут всё просто. Если просто хранить дату — достаточно Date. Если надо проводить различные действия (например подсчет количества дней между событиями итп) — то возможно есть смысл и Сalendar заюзать.
SELECT COUNT(*) FROM
(SELECT subscribers.id
FROM subscribers INNER JOIN subscriptions ON subscribers.id = subscriptions.subscribers_id
GROUP BY subscribers.id
HAVING COUNT(subscriptions.id) > 2) AS counts;
Здесь начал писать о том, как у меня обстоят дела с идеями начиная с самого раннего деццтва — возможно будет Вам, или кому-то ещё, полезным.
Где-то после середины написал о том — про ущербность идей. Возможно даже это заставит Вас начать активно изучать предметную область, в которой, как говорите — не специализируетесь.