MySQL高阶2159-分别排序两列

题目

编写解决方案,使:

  • first_col 按照升序排列。
  • second_col 按照 降序排列。

准备数据

python 复制代码
Create table If Not Exists Data (first_col int, second_col int)
    Truncate table Data
    insert into Data (first_col, second_col) values ('4', '2')
    insert into Data (first_col, second_col) values ('2', '3')
    insert into Data (first_col, second_col) values ('3', '1')
    insert into Data (first_col, second_col) values ('1', '4');

分析数据

a表

sql 复制代码
select row_number() over(order by first_col) as id, first_col
     from Data

b表

sql 复制代码
select row_number() over(order by second_col desc) as id, second_col
     from Data

根据关联条件将两表关联起来

sql 复制代码
select a.first_col, b.second_col
from
    (select row_number() over(order by first_col) as id, first_col
     from Data) a join
    (select row_number() over(order by second_col desc) as id, second_col
     from Data) b on a.id = b.id;

总结

如果两个表关联条件字段相同,也可以使用using(关联的字段名)

比如这道题,最后可以使用"using(id) " 代替 " on a.id = b.id"


本题错误做法

sql 复制代码
select * from data
    order by first_col asc,second_col desc;

因为本题是单独让每列排序,而上面做法second_col的降序会在first_col升序的情况下再排序

相关推荐
奔跑的小蜗牛哈哈4 分钟前
使用redis实现发布订阅功能及问题
数据库·redis·bootstrap
柳鲲鹏26 分钟前
QT访问数据库:应用提示Driver not loaded
数据库
大G哥31 分钟前
MyBatis 源码分析 - SQL执行过程(三)之 ResultSetHandler
数据库·sql·microsoft·mybatis
abandondyy32 分钟前
NoSQL之 Redis配置与优化
数据库·redis·nosql
wrx繁星点点1 小时前
创建型模式-建造者模式:构建复杂对象的优雅解决方案
java·开发语言·数据结构·数据库·spring·maven·建造者模式
洛可可白2 小时前
CentOS 7 上安装 MySQL 8.0 教程
linux·服务器·mysql·centos·1024程序员节
清风拂山岗11112 小时前
部署通义千问到后端-过程记录
数据库
JavaOpsPro2 小时前
配置mysql 主主模式 GTID
mysql·gtid·主主模式
无忧无虑Coding3 小时前
Django入门教程——数据模型建立
数据库·django·sqlite
MXsoft6183 小时前
监控易监测对象及指标之:Canal中间件监控
大数据·数据库