抢沙发数据统计。
假设我们有一个文章系统,每个文章都可以被留言。
留言据保存在 comments 表中。comments表结构如下
|
字段名 |
含义 |
|
comment_id |
留言id(主键) |
|
article_id |
被留言的文章的id |
|
uid |
写此留言的用户id |
|
nickname |
用户昵称 |
|
write_time |
写留言的时间 |
抢沙发的定义:
给定一个开始时间 T1,结束时间 T2
如果一个留言是某文章的前5个留言,且留言时间介于T1和T2之间,则认为满足抢沙发条件(另一种等价描述:对于每篇文章的前5个留言中,其中留言时间介于T1和T2之间的留言符合抢沙发条件)。
要求:在给定开始时间T1和结束时间T2的情况下,统计出所有抢沙发成功的用户一共抢到多少个沙发(按抢到沙发的总数逆序排序)。例如:
|
用户昵称 |
满足抢沙发的留言总数 |
|
小明 |
32 |
|
小刚 |
25 |
|
小红 |
4 |
|
小白 |
1 |
|
小兰 |
1 |
编程过程中可以对一些外部条件作出假设(例如假设直接调用mysql查询得到结果),写出主要逻辑即可。
答案:
SELECT
nickname 用户呢称, count(*) 满足抢沙发的留言总数
FROM
comments AS a
WHERE
(
SELECT
COUNT(*)
FROM
comments AS b
WHERE
a.article_id = b.article_id
AND
a.comment_id > b.comment_id
) < 5
AND a.write_time >= '2012-09-17 00:00:00'
AND a.write_time <= '2012-09-18 23:59:59'
GROUP BY nickname
ORDER BY 满足抢沙发的留言总数 DESC
3986

被折叠的 条评论
为什么被折叠?



