精华帖 (0) :: 良好帖 (2) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-17
cy729215495 写道 1.显然用exists效率高 3.select * from user where exists ( select userid from Article inner join vote on article.articleid = vote.articleid where user.id=article.userId group by userId having avg(score)>100 and count(*) >=2 ) 探讨一下 我觉得你的exists中的子查询: select userid from Article inner join vote on article.articleid = vote.articleid where user.id=article.userId group by userId having avg(score)>100 and count(*) >=2 有问题,原因如下: Article 表 inner join vote 表,则把已发表的文章但是未投票的文章所对应的记录过滤掉了, 所以你count(*) 计算以发表的文章数时,会比实际的少。不知是否有考虑到? |
|
返回顶楼 | |
发表时间:2010-08-17
我是来围观第五个问题的答案的。
|
|
返回顶楼 | |
发表时间:2010-08-17
只说一点,能用左连接做掉的事情,尽量不要去用exists,in之类的
|
|
返回顶楼 | |
发表时间:2010-08-17
mercyblitz 写道 楼主喜欢用子查询哦,利用外连接速度会更好!
huzhenyu 写道 只说一点,能用左连接做掉的事情,尽量不要去用exists,in之类的
谢谢,确实~ |
|
返回顶楼 | |
发表时间:2010-08-17
lkj107 写道 第一个,俺会用外连接,然后 is null
exists的性能比外连接更好,曾用过做数十万数据量的查询,exists大概比外连接快30%左右 |
|
返回顶楼 | |
发表时间:2010-08-17
baidu的笔试题目
|
|
返回顶楼 | |
发表时间:2010-08-17
第五题呢?
|
|
返回顶楼 | |
发表时间:2010-08-17
niwei 写道 第五题呢?
1000W 用户,使用100w作为一个表,users_1,...users_10。 类似文章表类似。 |
|
返回顶楼 | |
发表时间:2010-08-17
对于第三题,大家都忽略了排序,我的答案如下:
select u.userName from User u inner join (select userId, avg(score) from Article a inner join Vote v on a.articleId=v.articleId group by a.userId having count(articleId)>5 and avg(score)>100) t on t.userId=u.userId order by t.avgCount |
|
返回顶楼 | |
发表时间:2010-08-17
对于第三题,大家都忽略了排序,我的答案如下:
select u.userName from User u inner join (select userId, avg(score) avgCount from Article a inner join Vote v on a.articleId=v.articleId group by a.userId having count(articleId)>5 and avg(score)>100) t on t.userId=u.userId order by t.avgCount |
|
返回顶楼 | |