php面试题

抢沙发数据统计。

假设我们有一个文章系统,每个文章都可以被留言。

留言据保存在 comments 表中。comments表结构如下

字段名

含义

comment_id

留言id(主键)

article_id

被留言的文章的id

uid

写此留言的用户id

nickname

用户昵称

write_time

写留言的时间

抢沙发的定义:

给定一个开始时间 T1,结束时间 T2

如果一个留言是某文章的前5个留言,且留言时间介于T1T2之间,则认为满足抢沙发条件(另一种等价描述:对于每篇文章的前5个留言中,其中留言时间介于T1T2之间的留言符合抢沙发条件)。

要求:在给定开始时间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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值