抢沙发数据统计。
假设我们有一个文章系统,每个文章都可以被留言。
留言据保存在 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