分组后组内再排序

分组后组内再排序

先做数据,打开navicat直接复制下面代码创建表和数据

建个表

DROP TABLE IF EXISTS `user_comment`;
CREATE TABLE `user_comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `contents` varchar(200) NOT NULL COMMENT '评论',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `addtime` (`create_time`),
  KEY `uid_addtime` (`user_id`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;

往表里插入几条数据

INSERT INTO `user_comment` 
(`user_id`,`contents`,`create_time`)
VALUES 
('1', '技改', '2021-09-15 11:26:44'),
('1', '技改', '2021-09-15 11:26:44'),
('2', '努力', '2021-09-02 11:26:21'),
('2', '哈哈', '2021-09-03 00:03:03'),
('3', '真该', '2021-09-04 00:04:04'),
('1', '桥上', '2021-09-01 00:05:05'),
('4', '救济', '2021-09-06 00:06:06'),
('4', '多多', '2021-09-07 00:07:07'),
('4', '向多', '2021-09-08 00:08:08'),
('4', '我不', '2021-09-09 00:09:09'),
('3', '那害', '2021-09-10 00:10:10'),
('1', '好啊', '2021-08-29 11:45:53')

在这里插入图片描述

要求:

  1. 查询每个人的最新评论
    分析:
    每个人(就是按id分组)
    最新评论(数据的id最大,数据的插入时间最大)
    2.分析结果:查出时间最大的数据,并且按user_id分组
    写sql
//按时间倒序查出来一张表
select * from user_comment
order by create_time desc

按时间倒序查出来的表
接着上边的sql添加,
按时间倒序排序后,按user_id分组

// 上边的sql 拿过来当做一张新的表 起个名 > t
(select  *  from	 user_comment  
order by
 create_time 	desc)t

select * from 
(select * from
 user_comment
order by create_time desc) as t
group by user_id

运行结果:
在这里插入图片描述
要求1:查询每个人的最新评论
再添加一个要求。
要求2:查询每个人的最新评论+并且统计每人的评论数量
还是先分析;
1.多加了一个统计数量
也就是多查一条数据,统计一下user_id的次数

上一个sql做修改,多查一条数据

select * from 
(select * from
 user_comment
order by create_time desc) as t
group by user_id
select t.*,COUNT(t.user_id)as conment_count
 from 
(
select * from user_comment
order by create_time desc
) t
group by user_id

结果:在这里插入图片描述
ok!
完工。

等等。。。。。如果要查最新的两条数据呢?两条?
要求:每个人最新评论的两条数据。
分析:还是时间最大的前两条数据
重新思路,先看原表

select * from user_comment

在这里插入图片描述
自联查询,统计出时间最大数据,取两条
按照时间倒序显示

select * from user_comment u
WHERE
(select COUNT(*)from user_comment u1 where
u1.user_id = u.user_id AND u1.create_time> u.create_time
)< 2
ORDER BY u.user_id,u.create_time desc

结果:
在这里插入图片描述
ok,收工。
继续研究,记录一下,有好思路好方法大家多交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值