看板 Database 關於我們 聯絡資訊
: 我希望能給定一段日期,查詢這段日期內使用者出現的次數並排序。 : 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有這種用法嗎?或是我希望的做法有其他方式可以達成呢? : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.136.224.65