精华帖 (0) :: 良好帖 (2) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-16
最后修改:2010-08-16
自己对sql的理解。用一句俗话说:人有七窍,已经通了六窍,有没有童鞋指点一下 问:关系模式:User(userId, userName), Article(articleId, userId, title, content),Vote(articleId, score),User为用户关系,Article为用户发表的文章关系,Vote为文章得票关系,title为文章标题、score为得票数。
答:
1 select * from User where useid not in(select userid from Article); 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分割分布式存储,文章类似,还可以用读写分离等策略水平扩展数据库. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-17
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 ) |
|
返回顶楼 | |
发表时间:2010-08-17
谢谢,第3个题目看来只要自己好好再想想就出来了,
exists在写hql和jdbc的时候从来没有用过,据说少量结果集用exists,大量结果集用in,再研究研究 |
|
返回顶楼 | |
发表时间:2010-08-17
-.-似乎是某B开头的公司的题。。不过是笔试时做的。。额
|
|
返回顶楼 | |
发表时间:2010-08-17
建议count(*)少用,用count(userid)之类的、 |
|
返回顶楼 | |
发表时间:2010-08-17
第一个,俺会用外连接,然后 is null
|
|
返回顶楼 | |
发表时间:2010-08-17
楼主喜欢用子查询哦,利用外连接速度会更好!
|
|
返回顶楼 | |
发表时间:2010-08-17
lkj107 写道 第一个,俺会用外连接,然后 is null
+1 |
|
返回顶楼 | |
发表时间:2010-08-17
mark.sql方面的学习需要加强
|
|
返回顶楼 | |
发表时间:2010-08-17
第三题:
select user.userName from user inner join ( --平均得票数大于100的用户 select art.userId from article art inner join vote on art.articleId = vote.articleId where art.userId in( --文章数大于5的用户 select userId from article group by userId having count(articleId) > 5 ) group by art.userId having avg(vote.score) > 100 ) newuser on user.userId =newuser.userId |
|
返回顶楼 | |