1.
SELECT ... COUNT(b.lot_id) ... group by b.lot_id
- всегда будет 1.
Вряд ли вам нужна группировка по lot_id.
2.
WHERE NOW() BETWEEN l.created_date AND end_lot_date
- не будет использовать индекс, лучше явно писать
WHERE l.created_date <= NOW() AND end_lot_date >= NOW()
3. Когда вы пишите запрос с group by - любые выбираемые данные должны быть или явно указаны в group by, или обернуты какими-то аггрегирующими фунциями (count, avg, max, group_concat итд). Иначе SQL тупо не понимает что ему делать с этим.
Приведу пример для наглядности:
name | age
Петя | 10
Вася | 10
select age, name from ... group by age.
В postgress/mssql/oracle это будет ошибка.
MySQLс дефолтными настройками проглатывает такой запрос, отдавая кортеж в котором age = 10, а name = случайное значение из подходящих name.
К счастью в MySQL есть замечательный параметр sql_mode который можно установить в only_full_group_by и все начнет работать как у взрослых. (что и произошло в вашем случае, судя по логу)