Re: [SQL ] 關於 再排序 與 效率 的問題

作者: rockchangnew (rock)   2013-11-23 00:56:11
: 我希望能給定一段日期,查詢這段日期內使用者出現的次數並排序。
: 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;
子查詢:
select table_log.uid,
(select sex from table_sex where table_log.uid=table_sex.uid) as sex,
count(*)
from table_log
where ............
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;
為何不將
order by count(*) desc 換成
order by count(*) desc,sex
: 的感覺,但是這樣子沒辦法順利執行(語法有錯)。
: 想請問MySQL有這種用法嗎?或是我希望的做法有其他方式可以達成呢?
: 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com