使用group by查詢時order by無效問題解決
阿新 • • 發佈:2019-02-14
第一種寫法:
SELECT * FROM t_kaoqin
WHERE p_id=1 AND TO_DAYS(t_kaoqin.kq_time)=TO_DAYS(NOW())
GROUP BY user_id
ORDER BY kq_time DESC
問題:發現先執行的group by,後執行order by,我要的結果是先排序再分組。
第二種寫法:
SELECT temp.* FROM(
SELECT * FROM t_kaoqin
WHERE p_id=1 AND TO_DAYS(t_kaoqin.kq_time)=TO_DAYS(NOW())
ORDER BY kq_time DESC
) AS temp GROUP BY temp.user_id
問題:本以為將排序寫成一個子查詢應該會先排序後分組,執行後發現問題同第一種寫法一樣。
第三種寫法(最終解決的寫法):
SELECT temp.* FROM(
SELECT * FROM t_kaoqin
WHERE p_id=1 AND TO_DAYS(t_kaoqin.kq_time)=TO_DAYS(NOW())
ORDER BY kq_time DESC LIMIT 0,10000
) AS temp GROUP BY temp.user_id
解決方式:在子查詢中新增LIMIT 0,10000則可使子查詢語句即排序執行完再進行分組。