欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

数据库面试题解决思路

更新时间: 2014-01-05 02:30:30 责任编辑: Author_N1

 

数据库面试题
今天去腾讯实习生面试,面试官给了一个题目。

现在有30张表,每张表记录了当天的登录用户信息(一个用户由于时间不同可以有多项),每张表大约有8亿项。

现在要求使用SQL操作查找出这个月登陆次数最多的前N个用户。

大家多多提供思路啊。

后面还会继续加分。
--参考方法--
select * from tablename where DATEDIFF(day,RecordTime,getdate())<=30  order by(numline) 
--参考方法--
登陆次数前N的用户至少在一个表排前N
每张表前TOP N找出 N*30条排序 
--参考方法--
学习学习
--参考方法--
select username,sum(cnt) as cnt from
(
select username,count(*) as cnt from tbl_name1
union
select username,count(*) as cnt from tbl_name2
......
union
select username,count(*) as cnt from tbl_name30
)
order by cnt desc

这是全部的倒序,想取前N个的话自己再加个限制语句

--参考方法--
应该是union all
select username,sum(cnt) as cnt from
(
select username,count(*) as cnt from tbl_name1 group by username
union all
select username,count(*) as cnt from tbl_name2 group by username
......
union all
select username,count(*) as cnt from tbl_name30 group by username
)
group by username
order by cnt desc
或者干脆就
select username,count(*) as cnt from
(
select username from tbl_name1
union all
select username from tbl_name2
......
union all
select username from tbl_name30
)
group by username
order by cnt desc
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:30:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/10639/
本文WWW.DOC100.NET DOC100.NET版权所有。