このクエリをより効率的にするために、ネストされたLEFT JOIN
. を削除できるように に置き換えることはできないかと考えましたがCOUNT(ActiveUsers)
、これでは正しい結果が得られないようです。私が使用している元のコードは次のとおりです。COUNT(DISTINCT IF(SUM(grand_total)>0,id,NULL))
LEFT JOIN
SELECT
COUNT(DISTINCT users.id) AS NumCustomer,
COUNT(ActiveUsers) AS NumActiveCustomers,
COUNT(ActiveUsers)/COUNT(DISTINCT username) AS CloseRate
FROM users
LEFT JOIN orders ON orders.userid = users.id
LEFT JOIN (SELECT id AS ActiveUsers FROM users LEFT JOIN orders ON orders.userid = users.id GROUP BY id HAVING SUM(grand_total)>0 ) AS Active ON users.id = Active.ActiveUsers
WHERE users.datecreated LIKE '2013%'
GROUP BY YEAR(users.created), MONTH(users.created)
ORDER BY YEAR(users.created), MONTH(users.created)
このコードをより効率的にする方法はありますか?