边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

【Oracle】ORDER BY 2 DESC,1 ASC,同时对多个数据列进行不同的顺序排序&Oracle中的 (+)

最初想对 travelled_distance 降序排列 ,如果有两个或者更多的用户旅行了相同的距离, 那么再以 name 升序排列
然后就写了下面的

SELECT U.NAME name,
NVL(T.SS,0) travelled_distance 
FROM Users U,
(SELECT R.USER_ID,
SUM(NVL(R.DISTANCE,0)) AS SS
FROM Rides R GROUP BY R.USER_ID ORDER BY SUM(NVL(R.DISTANCE,0)) DESC) T 
WHERE U.ID = T.USER_ID(+) 
ORDER BY T.SS DESC,U.NAME ASC

然后发现一直执行错误,后面改成了ORDER BY 2 DESC,1 ASC
即先按照选择列里的第二列进行降序排序,再按选择列的第一列降序排序
其中第一列是name,第二列是travelled_distance

SELECT U.NAME name,
NVL(T.SS,0) travelled_distance 
FROM Users U,
(SELECT R.USER_ID,
SUM(NVL(R.DISTANCE,0)) AS SS
FROM Rides R GROUP BY R.USER_ID ORDER BY SUM(NVL(R.DISTANCE,0)) DESC) T 
WHERE U.ID = T.USER_ID(+) 
ORDER BY 2 DESC,1 ASC

好歹是没报错了
PS:
Oracle中的 (+) 是一种 左/右连接的特殊表达方式, (+) 号一侧代表被连接的对象

posted @   DbWong_0918  阅读(810)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示