Это SQL-запрос, который я написал, он работает нормально, но медленно.
SELECT D.Username,
SUM(CASE WHEN D.type = 'Yes' THEN 1 ELSE 0 END) as Yes,
SUM(CASE WHEN D.type = 'No' THEN 1 ELSE 0 END) as No,
SUM(CASE WHEN D.type = '' THEN 1 ELSE 0 END) as Other,
SUM(CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) as Sales,
COUNT(*) as TOTAL FROM dairy as D
LEFT JOIN (SELECT DISTINCT mobile FROM sales) as S on D.MobileNo = S.mobile
WHERE source = 'Network' AND UNIX_TIMESTAMP(CheckDate) >= 1309474800 AND UNIX_TIMESTAMP(CheckDate) <= 1309561200
group by D.Username order by TOTAL DESC
Как видите, подсчитайте количество продаж Да, Нет, Другое и соответствующую продажу MobileNo (D.MobileNo = S.mobile
).
Я попытался добавить индекс к типу, имени пользователя, мобильному телефону, MobileNO, CheckDate и источнику - производительность не сильно улучшилась.