0
点赞
收藏
分享

微信扫一扫

【瞎老弟mysql】10-数据的排序

殇感故事 2022-01-31 阅读 36

前情回顾

试设想这样一个场景,班级组织了一场考试,考试结束后,要根据分数,进行排名,此时,如果只有分组聚合的能力的话,肯定是显得有些不足的,我们也需要有排序的能力。

为了,能够记录所有人的分数,我们创建这样一个数据表

create table Score(
    id int not null auto_increment,
    name varchar(50) not null,
    math int,
    python int,
    mysql int,
    primary key(id)
);

当然,我们还要插入一些数据

insert into Score values
    (0, '瞎老弟', 33, 100, 100),
    (0, '瞎老妹', 89, 77, 63),
    (0, '北小鸟', 78, 78, 88),
    (0, '科斯基', 89, 99, 96),
    (0, '嘉陵姬', 99, 12, 13),
    (0, '神老弟', 99, 99, 99);

使用order by进行排序

 比如说,如果我们希望对数学成绩进行排序,那么需要这样做

select name, math, python, mysql
    from Score
    order by math;

排序,所使用的默认顺序是升序,也就是从小到大的顺序,进行排序。

如果我们不想使用升序进行排序,而是希望使用降序进行排序,也就是从大到小排序,那么需要加入关键字,desc

比如说,如果我们要对数学成绩进行降序排序,那么需要这样做。

select name, math, python, mysql
    from Score
    order by math desc;

需要说明的是,默认的升序排序,也是可以通过asc进行指定的,不过由于升序使用的asc是默认的排序方式,因此一般无需指定asc,只需要在降序排序的时候,指定desc就可以了。

排序的时候,我们也可以指定多个列同时进行排序,比如,我们发现当使用升序排序数学成绩的时候,有的人的成绩重复了,因此我们希望,如果在升序排序数学成绩的时候,成绩发生了重复,那么我们就降序排列python成绩,我们可以这样做

select name, math, python, mysql
    from Score
    order by math, python desc;

order by排序的时候,也可以使用select并没有选择的字段,比如说,我们通过数学成绩对每个人进行排序,但是我们不要查询出他们所对应的数学成绩

select name
    from Score
    order by math;

当然,这里可能又有人有疑问说,我不想按照单科成绩进行排名,我希望能够对总分进行排名,这应该怎么办呢。很简单,只需要使用我们之前章节中学习过的运算符就可以了,比如说,像这样使用

select name, math, python, mysql
    from Score
    order by math + python + mysql;

通过字段顺序进行排序

比如说,之前,我们在通过数学成绩进行排序的时候,是这样使用的。

select name, math, python, mysql
    from Score
    order by math;

从这里,我们可以看出,name排在第1个,math排在第2个,python排在第3个,mysql排在第4个。因此,我们想到了一种简化的排序方式,也就是说,通过指定数字,来进行排序。

select name, math, python, mysql
    from Score
    order by 2;

由于math就是第2个,因此,在这里,order by 2等同于order by math。

不过需要注意的是,最好请不要使用这种方式,主要有以下两个原因

点击查看瞎老弟mysql系列全部文章

举报

相关推荐

0 条评论