http://www.dewen.net.cn/q/16007/mysql查询如何先排序再分组呢

kwooshung
2 票
kwooshung 11
比如数据表“article”中有一组这样的数据:

id uid title
... .... .....
375 1 文章标题1
376 1 文章标题2
377 1 文章标题3
378 2 asdfasdf
379 3 fdaewqwe
... .... .....

然后我写了一句这样的sql:
select * from article order by id desc
执行后,结果如下:

id uid title
... .... .....
379 3 fdaewqwe
378 2 asdfasdf
377 1 文章标题3
376 1 文章标题2
375 1 文章标题1
... .... .....

然后我又加入了group by,为了只调用每个用户的1篇文章,sql代码如下
select * from article group by uid order by id desc
执行后,结果如下:

id uid title
... .... .....
379 3 fdaewqwe
378 2 asdfasdf
375 1 文章标题1
... .... .....

上面的数据看似正常,其实不对,因为先分组后排序了,所以我没法取得用户的最新文章了,始终是第一篇,正确的结果应该是:

id uid title
... .... .....
379 3 fdaewqwe
378 2 asdfasdf
377 1 文章标题3
... .... .....

这样才是取得用户的最新文章,并且过滤掉了用户的其他文章,因为如果页面上显示5条文章,不能有3条都是同一个人写的文章,应该这5条应该是最近发表文章的5个人的最新文章。

期间查询了很多技术资料,说用max或distinct的都不对,结果都是只显示第一篇文章。而且distnct更查询出来的结果顺序不对,更乱了。比如1,2,10,20,这几个id号变成了:

1
10
2
20

所以,想请教各路SQL大仙,看看应该怎么办呢?

当然,要求不能使用子查询。

brayden认证专家
2 票
brayden6562
首先 非大仙. 所以我认为只用一个简单 的sql满足不了你的需求.

select A.*
from article A,
(select max(id) mid from article group by uid) TMP
where A.id = TMP.mid;

再解释一下, 对标准sql来说, 用了group by, select/having/order by里只能有(group by的那个column, 或者聚集函数). 就是说select name from table1 group by id; 是有问题的(我记得oracle会报错); 但是mysql会正常返回, 这个mysql有一个扩展,
http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
"The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate."

所以对你的问题来说,
select * from article group by uid; 这步以后回来的已经是不确定的值了.

http://stackoverflow.com/questions/7594865/why-does-mysql-add-a-feature-that-conflicts-with-sql-standards

转载于:https://www.cnblogs.com/brayden/p/5262113.html

http://www.dewen.net.cn/q/16007/mysql查询如何先排序再分组呢相关推荐

  1. http://www.dewen.net.cn/q/15807/java byte 疑问

    http://www.dewen.net.cn/q/15807/java byte 疑问 罢巴 1 票 罢巴 252 看的是 java7 入门经典,第58页有一个关于byte类型变量初始化的问题,希望 ...

  2. http://www.dewen.net.cn/q/9980/JQuery AJAX GBK 编

    http://www.dewen.net.cn/q/9980/JQuery AJAX GBK 编码 wpjsolo 1 票 wpjsolo 53 $.ajax({ type:"POST&qu ...

  3. http://www.dewen.net.cn/q/14879/搜索引擎结果自动跳转

    http://www.dewen.net.cn/q/14879/搜索引擎结果自动跳转 车头灯 2 票 车头灯 28 我是学生,维护学校的网站,广外地带,大家可以搜一下. 在搜索引擎,google和百度 ...

  4. http://www.dewen.net.cn/q/6120/如何获取Java对象的大小

    http://www.dewen.net.cn/q/6120/如何获取Java对象的大小 kenvi 1 票 kenvi 2078 在C或者C++里经常会通过sizeof来计算一个对象所占空间的大小, ...

  5. http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合

    http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合 tieGump 1 票 tieGump 8 例如 $data = array(1,2,4 ...

  6. http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题

    http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题 王老五 2 票 王老五 13 将一个单浮点数精确到千分位的程序 //舍入计算 精确到千分位 void ...

  7. http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题

    http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题 ovalpo 1 票 ovalpo 8 举例说明,例如有行文本,想找出由 << ...

  8. http://www.dewen.net.cn/q/14665/个人感觉用二分法最完美的,需要操作系统支持随机读取指定一行的数据,貌似现在还不行,江湖救急呀...

    http://www.dewen.net.cn/q/14665/个人感觉用二分法最完美的,需要操作系统支持随机读取指定一行的数据,貌似现在还不行,江湖救急呀 评论 (0) • 举报 (0) • 分享 ...

  9. http://www.dewen.net.cn/q/13558/100阶乘

    http://www.dewen.net.cn/q/13558/100阶乘 追梦天涯 1 票 追梦天涯 19 100阶乘怎么算才不会溢出 评论 (0) • 举报 (0) • 分享 • 链接 • 201 ...

最新文章

  1. Ajax 完整教程 (转)
  2. pycharm 更改字体和界面样式
  3. tp3.2.3权限控制二之后台管理部分,及菜单栏目显示问题
  4. linux安装mysql5.7.25教程,Linux安装mysql-5.7.25
  5. java多态和继承_Java 继承与多态的深入理解
  6. 第一章 C++ primer Plus
  7. 可配置的逻辑块(CLB)
  8. 各大主流K8S服务全方位能力比对
  9. Tr A HDU1575
  10. 小玉买文具(洛谷-P1421)
  11. java finalize逃脱_finalize(),析构函数(finalization)
  12. 一线城市BAT名企软件测试职位解析,有什么样的技术要求?
  13. 基于hadoop构建对象存储系统_基于Hadoop企业私有云存储平台的构建
  14. include问题及错误解决
  15. 使用 jQuery 修改 css 中带有 !important 的样式属性
  16. 微信跳一跳PHP刷分源码,可实现在线刷分。非原创
  17. golang快速入门[3]-go语言helloworld
  18. Win10 通知区域蓝牙图标消失问题
  19. vue表单校验,根据某选项追加或去掉校验
  20. 计算机专业我的理想作文,我的理想经典优秀作文

热门文章

  1. 微信小程序-人脸识别+输出人脸匹配信息
  2. tgp饥荒服务器修改人数,求饥荒TGP联机版的搭建服务器教程有多详细要多详细
  3. 2020年中国化学发光行业发展现状、竞争格局及未来发展趋势分析,市场规模爆发式增长,成为体外诊断中的“主力军”「图」
  4. 显控一体机选型_显控一体机_显之研
  5. 通过训练获得最优量化区间——Quantization Interval Learning
  6. 818,你所不了解的EGF重组人表皮生长因子
  7. freemarker中的split字符串分割
  8. Eclipse不提示的解决办法
  9. Java 中Map四种取值方式
  10. geotools 的书籍