当group by 遇上order by 后总感觉语句是对的,然而结果却...
侧边栏壁纸
  • 累计撰写 194 篇文章
  • 累计收到 31 条评论

当group by 遇上order by 后总感觉语句是对的,然而结果却...

五好
2018-12-08 / 0 评论 / 953 阅读 / 正在检测是否收录...

有文章表txt字段如下:

bid, aid, title, ctime ...

表数据如下:

bid aid title ctime
1   1   第一章 123
1   2   第二章 124
3   3   第一章 121
4   4   第二章 125
4   5   第一章 122

...
现在要求 按照bid(书ID)不能重复,而且按照 ctime(创建时间)降序做一个列表
那么很自然的,可能会写出这样的SQL语句

select * from txt group by bid order by ctime;
嗯,目光再扫射一遍,不错,就这样,应该,肯定,绝对可以满足需求了^_^

然而实际执行之后却突然发现分组后排序不对.

为什么?

本着实事求是的态度,可能是这样的情况
group by 后 他返回 ctime 可能是随机某个记录的值,然后再order by 显然是不对了的(只是推测...暂时没有去求证.)
现在把解决方法写下来仅供参考:

select * from (select *,max(ctime)ctimes from txt group by bid) a order by ctimes desc;

执行.嗯,没错了.

0

评论 (0)

取消