最近開始接觸MySQL,遇到了兩個問題。
====== 主要設定 ======
主要的表格有兩個,一個記錄使用者出沒的日期:
Table_log:
uid date_time
A00001 20131105
A00002 20131106
A00001 20131107
A00003 20131108
... ...
一個記錄使用者的性別:
Table_sex
uid sex
A00001 0
A00002 0
A00003 1
... ...
我希望能給定一段日期,查詢這段日期內使用者出現的次數並排序。
SELECT Table_log.uid, Table_sex.sex, COUNT(*)
FROM Table_log, Table_sex
WHERE (date_time >= 20131105 AND date_time <= 20131107 AND
Table_log.uid = Table_sex.uid)
GROUP by Table_log.uid
ORDER BY COUNT(*) DESC
LIMIT 100;
這段指令是可以正常執行的。以下是我的問題。
==== 問題 =====
1. 關於效率。
我看到一些討論與文章提到「INNER JOIN 的效率會高於 子查詢」。
想請問的是像我這種寫在 WHERE 裡面的,類似子查詢的方法效率會比INNER JOIN差嗎
因為前人留下來的方法是INNER JOIN,但是希望能用簡單一點的寫法完成。
2. 關於排序。
上面執行的結果會是
uid sex COUNT(*)
A00001 0 20
A00003 1 15
A00004 0 3
A00008 1 2
有100行,照著COUNT(*)排序。
現在我希望這100行能照著 sex(性別) 排序,想到方法是類似:
SELECT * IN (
SELECT Table_log.uid, Table_sex.sex, COUNT(*)
FROM Table_log, Table_sex
WHERE (date_time >= 20131105 AND date_time <= 20131107 AND
Table_log.uid = Table_sex.uid)
GROUP by Table_log.uid
ORDER BY COUNT(*) DESC
LIMIT 100
}
ORDER BY sex;
的感覺,但是這樣子沒辦法順利執行(語法有錯)。
想請問MySQL有這種用法嗎?或是我希望的做法有其他方式可以達成呢?
謝謝