这个SQL查询可以简化吗?

时间:2012-06-08 21:22:23

标签: mysql

我有2张桌子。 MySQL的

用户:A_ID,名称 事件:B_ID,A_ID,cat_id,日期

现在我想让所有在一段时间内参与更多活动的用户,并且还需要根据类别添加。我正在做这样的事情:

select name from users ,
 (select A_id, count(*) 
  from   event 
  where date<=givendate
 group by A_id
 order by count(*) desc ) e
 where users.A_id=e.a_id
 limit 0,5

有没有简单易懂的方法来编写该脚本?

由于

1 个答案:

答案 0 :(得分:0)

除了一些小问题之外,您的查询看起来还不错:

  • 您的ORDER BYLIMIT应该在外部选择,否则结果的顺序是不确定的。
  • 使用JOIN关键字加入两个表。

试试这个:

SELECT u.name
FROM users AS u
JOIN
(
    SELECT A_id, COUNT(*) AS cnt
    FROM event
    WHERE date <= givendate
    AND cat_id = 42
    GROUP BY A_id
) AS e
USING (A_id)
ORDER BY e.cnt DESC
LIMIT 5