论坛首页 招聘求职论坛

某个大公司的sql面试题,自己不太会做有没有童鞋指点一下

浏览 24152 次
精华帖 (0) :: 良好帖 (2) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-08-18  
只要查出东西出来就行了吧,考虑用这个用那个累不累啊
0 请登录后投票
   发表时间:2010-08-18  
貌似大家都关心些SQL语句去了?
还是应该多讨论一下后面两个问题吧...............
0 请登录后投票
   发表时间:2010-08-18  
msi110 写道
貌似大家都关心些SQL语句去了?
还是应该多讨论一下后面两个问题吧...............

恩,围观中,我只知道根据ID mod 下,然后找到相应的表去取数据,如userid %10 ,如果=1,就放在 user_1表,=2就在user_2中。不过这样做统计之类的话,就比较折腾了,大家有什么好的方案不?
0 请登录后投票
   发表时间:2010-08-18  
kakaluyi 写道

自己对sql的理解。用一句俗话说:人有七窍,已经通了六窍,有没有童鞋指点一下

问:关系模式:User(userId, userName), Article(articleId, userId, title,   content),Vote(articleId, score),User为用户关系,Article为用户发表的文章关系,Vote为文章得票关系,title为文章标题、score为得票数。
(1)用SQL语言查询所有没发表过文章的用户名;
(2)用SQL语言查询得票数大于100的所有文章标题,按得票数倒序排列;
(3)用SQL语言查询出发表文章数大于5,文章平均得票数大于100的用户名,按平均得票数倒序排列;
(4)设计这些表的主键、外键和索引,并指出上面三个查询所使用的索引。
(5)当用户数超过1000万,文章数超过1亿时,如何考虑存储及性能的改进和优化?

 

答: 

 

1 select * from User where useid  not in(select userid from Article);
2 select title from article   inner  join vote  on article.articleid=vote.aritcleid and  vote.score>100 order by vote.score asc;
3有点不太会,下面胡乱乱写了一通

3 select * from user where userid in(select userid from Article inner join vote on article.articleid = vote.articleid group by userId  having avg(score)>100) group by userid having count(*) >5;

4主键外键应该很简单,索引第一个应该是userid,第二个是articleid 和score,第三个应该是articleid和 userid

5用户数按照id分割分布式存储,文章类似,还可以用读写分离等策略水平扩展数据库.

 

0 请登录后投票
   发表时间:2010-08-18  
哥们第一个就错了,人要的是  用户名 
0 请登录后投票
   发表时间:2010-08-18  
讨论一下最后一个问题吧
0 请登录后投票
   发表时间:2010-08-18  
都没说第五题啊,求解。
0 请登录后投票
   发表时间:2010-08-18  
reilost说的难道是BD?
0 请登录后投票
   发表时间:2010-08-18  
not in还是少用,个人感觉很慢... 左连接之后isnull应该比not in会好很多。
0 请登录后投票
   发表时间:2010-08-18  
Mrpublic 写道
finux 写道
呵呵。。。发下我的想法,不一定正确哦~
1.
select username from user usr
left join article art on art.userid = user.userid
where art.userid is null;



可以把On 与 where 在一起用哦?? 求解

我只见过... left join ... on ...没有见过 后面还有一个where,
本人菜鸟,给解...

你试试就知道了,嘻嘻。。。
我天天写这样的SQL呀~
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics