河南新华电脑学校咋样院娱乐活动多吗?

15:57 提问
mysql查询如何先排序再分组呢?纠结了好几天了。
比如数据表“article”中有一组这样的数据:
然后我写了一句这样的sql:
select * from article order by id desc
执行后,结果如下:
然后我又加入了group by,为了只调用每个用户的1篇文章,sql代码如下
select * from article group by uid order by id desc
执行后,结果如下:
上面的数据看似正常,其实不对,因为先分组后排序了,所以我没法取得用户的最新文章了,始终是第一篇,正确的结果应该是:
这样才是取得用户的最新文章,并且过滤掉了用户的其他文章,因为如果页面上显示5条文章,不能有3条都是同一个人写的文章,应该这5条应该是最近发表文章的5个人的最新文章。
期间查询了很多技术资料,说用max或distinct的都不对,结果都是只显示第一篇文章。而且distnct更查询出来的结果顺序不对,更乱了。比如1,2,10,20,这几个id号变成了:
所以,想请教各路SQL大仙,看看应该怎么办呢?
当然,要求不能使用子查询。
按赞数排序
SELECT S.* FROM (SELECT * FROM ARTICLE ORDER BY ID DESC ) S GROUP BY UID
试试这个 :把排完序后的数据作为临时表再分组
select id,distinct uid,title from article group by uid
order by id desc
....难道所有的需求,一个select就能搞定
不用子查询,目前好像没找到合适的解决方案。参考这篇文章:
CREATE TABLE test
str VARCHAR(1),
time DATETIME
INSERT INTO ywtg.test (str, time) VALUES ('a', ' 16:41:37');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:42:26');
INSERT INTO ywtg.test (str, time) VALUES ('a', ' 23:42:46');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:42:58');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:43:13');
如上是表接口和数据,**需求:组与组之间按时间从大到小排序,组内数据按从小到大排序.**
如上数据也就是b组在a组前,b组和a组 组内数据又按从小到大排序,实现sql如下:
SELECT tt.*
FROM test tt LEFT JOIN (
@rownum := @rownum + 1 AS rownum,
FROM (SELECT @rownum := 0) r, (SELECT str
GROUP BY str
ORDER BY time DESC) test
) aa ON tt.str = aa.str
ORDER BY aa.rownum,
CREATE TABLE test
str VARCHAR(1),
time DATETIME
INSERT INTO ywtg.test (str, time) VALUES ('a', ' 16:41:37');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:42:26');
INSERT INTO ywtg.test (str, time) VALUES ('a', ' 23:42:46');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:42:58');
INSERT INTO ywtg.test (str, time) VALUES ('b', ' 23:43:13');
如上是表结构和数据,**需求:组与组之间按时间从大到小排序,组内数据按从小到大排序.**
如上数据也就是b组在a组前,b组和a组 组内数据又按从小到大排序,实现sql如下:
SELECT tt.*
FROM test tt LEFT JOIN (
@rownum := @rownum + 1 AS rownum,
FROM (SELECT @rownum := 0) r, (SELECT str
GROUP BY str
ORDER BY time DESC) test
) aa ON tt.str = aa.str
ORDER BY aa.rownum,
select id,distinct uid,title from article order by id desc
其他相似问题附带简单的MySQL例子
服务器君一共花费了161.565 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
在MySQL使用中,经常需要查询每个的前几条记录(查询分组后每一个组的前几项),下面写了个简单的例子说明下SQL的写法。简单的表设计如下,要求每个班总分排名最前的前两条数据。
测试表语句如下:
create table test(id int unsigned not null auto_increment primary key,name varchar(10),class varchar(20),score varchar(20));
insert into test(name, class, score) values ('gonn', '6(1)', '299');
insert into test(name, class, score) values ('yyun', '6(1)', '259');
insert into test(name, class, score) values ('lin', '6(1)', '289');
insert into test(name, class, score) values ('mei', '6(1)', '277');
insert into test(name, class, score) values ('xj', '6(2)', '287');
insert into test(name, class, score) values ('zhl', '6(2)', '277');
insert into test(name, class, score) values ('lwjs', '6(2)', '257');
insert into test(name, class, score) values ('lulu', '6(2)', '265');
运行以上SQL,得到的表结构如下:
mysql> SELECT * FROM
+----+------+-------+-------+
| id | name | class | score |
+----+------+-------+-------+
1 | gonn | 6(1)
2 | yyun | 6(1)
7 | lwjs | 6(2)
8 | lulu | 6(2)
+----+------+-------+-------+
8 rows in set
mysql> SELECT a.id,a.name,a.class,a.score
FROM test a LEFT JOIN test b on a.class = b.class and a.score < b.score
GROUP BY a.id,a.name,a.class,a.score
HAVING count(b.id) < 2
ORDER BY a.class,a.score DESC;
+----+------+-------+-------+
| id | name | class | score |
+----+------+-------+-------+
1 | gonn | 6(1)
+----+------+-------+-------+
4 rows in set
mysql> SELECT * FROM test a
WHERE 2 >(SELECT count(*) FROM test WHERE class = a.class and score>a.score)
ORDER BY a.class,a.score DESC;
+----+------+-------+-------+
| id | name | class | score |
+----+------+-------+-------+
1 | gonn | 6(1)
+----+------+-------+-------+
4 rows in set
这里列出了多种SQL语句的实现方法,有些是MySQL特有的(Limit, 其它数据库可根据实际更改,比如oracle的rownum,MS SQL SERVER 的 top,..),有时是SQL标准支持的。但效率上和应用的场合或许不同。具体应用时可根据实际表中的记录情况,索引情况进行选择。
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
现代魔法研究协会欢迎你
阅读一百本计算机著作吧,少年
程杰 (作者)
《大话数据结构》主要内容包含:数据结构介绍、算法推导大O阶的方法;顺序结构与链式结构差异、栈与队列的应用;串的朴素模式匹配、KMP模式匹配算法;二叉树前中后序遍历、赫夫曼树及应用;图的深度、广度遍历;最小生成树两种算法、最短路径两种算法;拓扑排序与关键路径算法;折半查找、插值查找、斐波那契查找等静态查找;稠密索引、分块索引、倒排索引等索引技术;二叉排序树、平衡二叉树等动态查找;B树、B+树技术,散列表技术;冒泡、选择、插入等简单排序;希尔、堆、归并、快速等改进排序。
扫一扫,在手机上阅读
栏目最新博文
23,802 views
19,491 views
24,595 views
167,222 views
21,391 views
22,181 views
14,986 views
19,726 views
21,805 views
15,794 views
栏目博文推荐
6,434 views
7,674 views
6,504 views
7,766 views
7,748 views
28,892 views
10,159 views
13,124 views
19,726 views
4,402 views
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(,腾讯微博:,欢迎与我联系。2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2011年 总版技术专家分年内排行榜第四2010年 总版技术专家分年内排行榜第九2009年 总版技术专家分年内排行榜第八
2011年10月 总版技术专家分月排行榜第一
2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2011年 总版技术专家分年内排行榜第四2010年 总版技术专家分年内排行榜第九2009年 总版技术专家分年内排行榜第八
2011年10月 总版技术专家分月排行榜第一
2016年4月荣获微软MVP荣誉称号2015年4月荣获微软MVP称号2014年4月 荣获微软MVP称号
2016年7月 MS-SQL Server大版内专家分月排行榜第一
2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号
2012年7月 MS-SQL Server大版内专家分月排行榜第一2012年6月 MS-SQL Server大版内专家分月排行榜第一2012年5月 MS-SQL Server大版内专家分月排行榜第一2012年4月 MS-SQL Server大版内专家分月排行榜第一
2011年 总版技术专家分年内排行榜第四2010年 总版技术专家分年内排行榜第九2009年 总版技术专家分年内排行榜第八
2011年10月 总版技术专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。MySQL 获取所有归类和每个分类的前几条记录 - MySQL当前位置:& &&&MySQL 获取所有归类和每个分类的前几条记录MySQL 获取所有归类和每个分类的前几条记录&&网友分享于:&&浏览:108次MySQL 获取所有分类和每个分类的前几条记录
比如有文章表 Article(Id,Category,InsertDate)
现在要用SQL找出每种类型中时间最新的前N个数据组成的集合
SELECT A1.*
FROM Article AS A1
INNER JOIN (SELECT A.Category,A.InsertDate
FROM Article AS A
LEFT JOIN Article AS B
ON A.Category = B.Category
AND A.InsertDate &= B.InsertDate
GROUP BY A.Category,A.InsertDate
HAVING COUNT(B.InsertDate) &= @N
ON A1.Category = B1.Category
AND A1.InsertDate = B1.InsertDate
ORDER BY A1.Category,A1.InsertDate DESC
@N 就是要取多少条
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有MySQL 查询分页数据中分组后取每组的前N条记录 - 博客频道 - CSDN.NET
“The key to immortality is first living a life worth remembering.” --Bruce Lee
分类:数据库
在使用数据库查询的时候,如果遇到对分页的数据分组,取每组的前N条,实际就是两次分页,先分页,在对分组的每组排序分页。SQL 如下
select a.*
select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段&t1.排序字段) as group_id
from 表 t1
where a.group_id&=3
实例,文章和评论,查询出前2篇文章和对应每篇文章的前2条评论
,c.content as c_content
(select ax.* from t_article ax ORDER BY id desc limit 0,2) as a
select c1.*
select t1.*,(select count(1)+1 from t_comment where article_id=t1.article_id and id&t1.id) as group_id
from t_comment t1
where group_id&3
order by c1.group_id desc
) as c ON a.id = c.article_id
a – article ,c–comment
排名:千里之外
(1)(10)(4)(2)(0)(3)(2)(4)(2)(1)}

我要回帖

更多关于 新华电脑学校咋样 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信