Eu tenho dois sql's que me dão os mesmos resultados:
Pergunta 1:
SELECT
u.*, COUNT(po.order_id) products_count
FROM (SELECT * FROM orders o WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)) o
LEFT JOIN products_orders po ON po.order_id=o.id
JOIN users u ON u.id=o.user_id
GROUP BY po.order_id
e Consulta 2:
SELECT
u.*, o.id order_id, COUNT(po.order_id) products_count
FROM users u
JOIN orders o ON o.user_id=u.id
LEFT JOIN products_orders po ON po.order_id=o.id
WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)
GROUP BY po.order_id
Eu me pergunto.. qual deve ser mais rápido? Query Explains mostra que eles são iguais... O que vocês acham pessoal?
Sua agregação não faz muito sentido (e a maioria dos bancos de dados, e até as versões mais recentes do MySQL irão rejeitá-la - Veja )
ONLY_FULL_GROUP_BY
... pode ter algo um pouco mais rápido se feito desta forma:GROUP BY o.user_id
orders_id
SELECT
O plano de execução para esta consulta é diferente e usa uma tabela derivada (na qual MySQL ou MariaDB nem sempre são muito bons), mas buscará seus usuários apenas uma vez.
Você pode conferir todos os detalhes no dbfiddle aqui