SQL语句排序的问题

碰到这样一个问题,对SELECT出来的记录集排序,比如有如有两个排序关键字,要对主要关键字按升序排列,次要关键字按降序排列,这个怎么整?我想了半天,这样行不?假设表名为a... 碰到这样一个问题,对SELECT出来的记录集排序,比如有如有两个排序关键字,要对主要关键字按升序排列,次要关键字按降序排列,这个怎么整?
我想了半天,这样行不?
假设表名为a,主要排序关键字为m,次要排序关键字为n,则
SELECT t.* FROM (SELECT * FROM a ORDER BY m ) as t
ORDER BY n DESC
试过好像还可以,数据较少的时候速度也蛮快,不知道数据多了会不会慢。
一楼: 说Order By无法分析。
二楼:读的时候,就是所有字段都是需要的。
展开
 我来答
supboy306
推荐于2019-08-28 · TA获得超过2.6万个赞
知道答主
回答量:243
采纳率:100%
帮助的人:13.1万
展开全部

你的写法是错误的,按照你的写法在对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 时,情况也是这样的。

普实软件
2017-08-14 · 知道合伙人软件行家
普实软件
知道合伙人软件行家
采纳数:1703 获赞数:7397
普实软件ERP专家

向TA提问 私信TA
展开全部

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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
micro0369
2017-09-19 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:3985万
展开全部

应该是这样吧:

SELECT * FROM a ORDER BY m,n desc

意思是,优先安装m升序排序,对于m相同的数据,按照n降序排序

你自己的写法的意思是:

先按升序排序,然后对查询结果再按降序排序;其结果是按照降序排序。

就是说,你第一次排序是不需要的。


你的写法适合于分页查询,然后按照降序展示数据的情况。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
枝茉乔傲丝
2020-03-19 · TA获得超过3790个赞
知道大有可为答主
回答量:3240
采纳率:33%
帮助的人:170万
展开全部
要第

第二行挨着
共同
属性
用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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一只小背娄
2010-04-24 · TA获得超过150个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:190万
展开全部
首先你要读出的字段要知道
比如你只读出title就不需要用select *了这样会增加检索时间
你可以写成
select 字段1,字段2,字段3,字段4
像这样字段就是你要用的
如果你是主题列表我想没有必要读出内容吧对不对
这样可以大大减少检索时间提交读库速度从而起到优化作用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式