If count is the only action you perform on the list, the query is optimized. You can trace the connectionbus to check which sql queries are generated, just to be sure.
You can have a parent object in which you store the value of its amount of children. Whenever you add or remove associations, adjust the count.
Edit: I want to add that I think your best best is to somehow capture this aggregate data in objects. Also, is the count a real-time number or could your run a Scheduled Event to perform these larger calculations periodically throughout the day?
In this case both solutions offered by Jason are not an option because the count is dependent on selection criteria entered by the end-user (like date from/until) and thus dynamic.
I guess you can try in this way, create a domain entity like ReportingEntity with attributes like time stamp and count number. Hence create this entity based on the selection criteria from user , save it and display it. Now it will be totally your choice whether you want to update the existing row or create a new row each and every time.
hope this suits your requirement :).