MySQL order by 排序问题,是 bug 还是我太年轻

2017-03-28 11:25:39 +08:00
 newworld

各位大佬看过来,小弟请教,MySQL 学艺不精...特地来请教各位大佬,望不吝赐教啊... 在使用 MySQL 排序的时候,

我想把 考号(字段 kh) 里面从左数第三个(包含第三个)取两个数为 11 的所有结果的 分数(字段 fs)进行 降序排列,可是我用order by出现这样的结果:
前面的有比较小的值(越小不应该在最后么),后面才是按照降序排列的(数据有几千条)...很尴尬, 同样,我如果用升序排列,则前面的是按照升序的排序的,可是最后的几行就不是的...最后的几行有比较小的分数(不应该是越到最后越是最大的分数么),特么真是太尴尬...

MySQL 代码如下:

SELECT kh, xm, fs FROM score WHERE SUBSTRING(kh, 3, 2) = '11' ORDER BY fs DESC


出现类似如下图的结果(这是使用降序的时候),请问该如何写 MySQL 语句?

2812 次点击
所在节点    MySQL
4 条回复
newworld
2017-03-28 14:12:34 +08:00
哪位知道的,赐教啊 //
binjjam
2017-03-28 14:24:59 +08:00
把 fs 的字段属性改成 整形 相关的。
binjjam
2017-03-28 14:28:09 +08:00
@binjjam 或者 ORDER BY abs(fs) desc
newworld
2017-03-28 14:56:17 +08:00
@binjjam #3 感谢 思密达..我发现我的 FS 字段是 varchar 的 我改成 int 整形在排序也对了,你说的使用 ORDER BY abs(fs) desc 也可以..我不知道 ABS(X)这个函数 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350841

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX