我需要一种更好的方法从一些表中检索前10位不同的UID。
设置:
我的目标是:
我的当前代码正在工作,但缓慢地杀死了数据库:
select
distinct uvt.uid as UID,
(select count(*) from user_view_tracker temp where temp.uid=uvt.uid and temp.ts>date_sub(now(),interval 1 month)) as CLICK
from user_view_tracker uvt
order by CLICK
limit 10很明显,不同的数据结构会有所帮助。但我现在还不能这么做。
发布于 2014-04-13 18:06:47
首先,删除该子查询,这应该足够了;)
select
uvt.uid as UID
,count(*) as CLICK
from
user_view_tracker uvt
where
uvt.ts > date_sub(now(),interval 1 month)
group by
uvt.uid
order by CLICK DESC
limit 10发布于 2014-04-13 18:04:29
尝试:
select uid, count(*) as num_stamps
from user_view_tracker
where ts > date_sub(now(), interval 1 month)
group by uid
order by 2 desc limit 10在过去的一个月里,我一直保留着你的标准,直到得到计数为止。如果你想数数的话,你可以删除这一行。
删除DISTINCT应能提高性能。如果您在外部查询中聚合并按uid进行分组,则没有必要,因为这会将数据与计数一起聚合到每uid一行。
发布于 2014-04-13 18:11:59
您应该在聚合函数中使用MySQL
SELECT UID, COUNT(ts) as Number_Of_Views FROM user_view_tracker
GROUP BY UID
ORDER BY Number_Of_Views DESC
LIMIT 10一个简单的示例,它选择查看的前10位UID
http://sqlfiddle.com/#!2/907c10/3
https://stackoverflow.com/questions/23046276
复制相似问题