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. JavaScript 开发者最期待的年度大会,惊喜不断,错过还要等好久!
  2. 稳定性三十六计-幂等设计
  3. 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
  4. navicat开启mysql数据库root用户的远程访问
  5. 回文数-时间变换-判断邮箱
  6. 【Java】GoF-23种设计模式在Java核心类库中的应用
  7. SQL:postgresql求多个点组成的多边形的geom数据
  8. 如何成为一名优秀的关卡设计师?
  9. java Vector 在多线程使用中需要注意的问题
  10. 如何将qlv格式转换为mp4格式?怎么将qlv的文件然后转换成mp4视频?
  11. 前端的性能优化-笔记
  12. Big Sur系统下的mac重置
  13. Nodejs全方位入门
  14. 四个漂亮CSS样式表
  15. 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文
  16. 带登录页面的猜数字小游戏
  17. 2022商业版游戏陪玩陪聊系统最新源码+视频教程+全套素材
  18. 【算法-枚举】淘气的青蛙 自己对解题思路的梳理
  19. 舒舍分析现在的北京租房市场
  20. 【狮子数学】chapter6-05-阿贝尔定理(第99讲)

热门文章

  1. 对人工智能未来发展的思考
  2. 打造创业团队的执行力
  3. JetBrains学生包续期
  4. The reference to entity “XX“ must end with the ‘;‘ delimiter.
  5. 京东图片列表、左侧导航栏、网易新闻列表、京东页面布局、京东轮播图
  6. JavaScript中与Array有关的操作
  7. 数学速算法_小学数学速算法,掌握了至少提高20分!
  8. 大数据架构和模式(五):利用大数据识别保险行业中的欺诈业务案例
  9. HDMI DVI VGA显示Detailed Timing Parameters
  10. linux用户、组的创建