首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Top-10 mysql查询

Top-10 mysql查询
EN

Stack Overflow用户
提问于 2014-04-13 18:00:26
回答 3查看 245关注 0票数 1

我需要一种更好的方法从一些表中检索前10位不同的UID。

设置:

  • 表user_view_tracker
  • 包含对{user id (uid)、时间戳(ts)}
  • 每天都在增长(今天是41k条目)

我的目标是:

  • 生成表user_view_tracker中查看最多的用户id中的前10位

我的当前代码正在工作,但缓慢地杀死了数据库:

代码语言:javascript
复制
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

很明显,不同的数据结构会有所帮助。但我现在还不能这么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-13 18:06:47

首先,删除该子查询,这应该足够了;)

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-04-13 18:04:29

尝试:

代码语言:javascript
复制
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一行。

票数 1
EN

Stack Overflow用户

发布于 2014-04-13 18:11:59

您应该在聚合函数中使用MySQL

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23046276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档