SQL语句排序的问题
我想了半天,这样行不?
假设表名为a,主要排序关键字为m,次要排序关键字为n,则
SELECT t.* FROM (SELECT * FROM a ORDER BY m ) as t
ORDER BY n DESC
试过好像还可以,数据较少的时候速度也蛮快,不知道数据多了会不会慢。
一楼: 说Order By无法分析。
二楼:读的时候,就是所有字段都是需要的。 展开
你的写法是错误的,按照你的写法在对n进行降序排序时,第一个m升序排序结果会失效,等于最终只读n做了降序排序,而且你的语句本身也比较冗余。
正确的写法是:
SELECT * FROM a ORDER BY m ASC ,n DESC;
我们可以通过一些实例来具体分析order by 子句的用法:
假设有Orders 表:
1、实例 1
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果如下:
2、实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
结果如下:
3、实例 3
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果如下:
4、实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果如下:
注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
1、升序排列【ORDER BY】
SELECT StudentID,Score FROM Score ORDER BY Score
SELECT StudentID AS 学生编号,(Score*0.9+5) AS 综合成绩
FROM Score
WHERE (Score*0.9+5)>60
ORDER BY Score
2、降序排列【DESC】
SELECT StudentID,Score FROM Score ORDER BY Score DESC
3、按多列排序
SELECT StudentID AS 学生编号, CourseID AS 课程ID, Score AS 成绩
FROM Score
WHERE Score > 60
ORDER BY CourseID, Score
应该是这样吧:
SELECT * FROM a ORDER BY m,n desc
意思是,优先安装m升序排序,对于m相同的数据,按照n降序排序
你自己的写法的意思是:
先按升序排序,然后对查询结果再按降序排序;其结果是按照降序排序。
就是说,你第一次排序是不需要的。
你的写法适合于分页查询,然后按照降序展示数据的情况。
行
第二行挨着
共同
属性
用ORDER
BY
PLACE,BEFOREGROUPING
排序
结
第1行
01
1
第4行
02
1
第3行
01
2
第2行
02
2
排序要
行
必须要第三列
参数
确定谁
谁挨着
说
谁
谁挨着
共
某属性
共
属性
靠第三列
完
否则
逻辑
说
通
比
属性列叫作组别
:
ORDER
BY
组别,BEFOREGROUPING,PLACE
查询结
:
组别
BEFOREGROUPING
PLACE
1
01
1
1
02
2
2
01
2
2
02
1
比如你只读出title就不需要用select *了这样会增加检索时间
你可以写成
select 字段1,字段2,字段3,字段4
像这样字段就是你要用的
如果你是主题列表我想没有必要读出内容吧对不对
这样可以大大减少检索时间提交读库速度从而起到优化作用