要求:
查询出用户信息,根据用户发表的信息个数对用户进行排序
/*用户表*/
CREATE TABLE `tb_user` (
`userId` int(11) NOT NULL auto_increment COMMENT 'testtest',
`userName` varchar(64) default NULL,
`userNo` varchar(64) default NULL,
PRIMARY KEY (`userId`)
);
/*插入测试数据*/
insert into `tb_user`(`userId`,`userName`,`userNo`) values (1,'张三','NO001'),(2,'李四','NO002'),(3,'王五','NO003');
/*信息表*/
CREATE TABLE `tb_article` (
`article_id` int(11) NOT NULL auto_increment,
`title` varchar(256) NOT NULL,
`content` varchar(1024) default NULL,
`userId` int(11) NOT NULL,
PRIMARY KEY (`article_id`)
);
/*插入测试数据*/
insert into `tb_article`(`article_id`,`title`,`content`,`userId`) values (1,'a','a',1),(2,'b','b',1),(3,'c','c',2),(4,'d','d',3),(5,'e','e',2),(6,'f','f',2);
- 根据信息表中信息个数对userId进行分组排序
SELECT userId FROM tb_article WHERE 1=1 GROUP BY userId ORDER BY COUNT(userId) DESC
- 使用子查询和刚才的排序的结果,查询出用户信息
SELECT t1.userId,(SELECT userName FROM tb_user t2 WHERE t2.userId=t1.userId) AS userName FROM tb_article AS t1 WHERE 1=1 GROUP BY t1.userId ORDER BY COUNT(t1.userId) DESC
最后的结果:
userId userName 2 李四 1 张三 3 王五
如果有更好的方法请不吝赐教!