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