• mysql排序数据


    一:order by的普通使用

    1.介绍

      当使用SELECT语句查询表中的数据时,结果集不按任何顺序进行排序。要对结果集进行排序,请使用ORDER BY子句。

      ORDER BY子句允许:

        对单个列或多个列排序结果集。
        按升序或降序对不同列的结果集进行排序。

      使用方式:

        SELECT column1, column2,...

        FROM tbl 

        ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...

      

    2.按照列进行排序

    SELECT
     contactLastname,
     contactFirstname
    FROM
     customers
    ORDER BY
     contactLastname DESC,
     contactFirstname ASC;

      

      在上面的查询中,ORDER BY子句首先按照contactLastname列降序对结果集进行排序,然后按照contactFirstname列升序对排序结果集进行排序,以生成最终结果集。

    3.按照表达式进行排序

      ORDER BY子句还允许您根据表达式对结果集进行排序

    SELECT
     ordernumber,
     orderlinenumber,
     quantityOrdered * priceEach
    FROM
     orderdetails
    ORDER BY
     ordernumber,
     orderLineNumber,
     quantityOrdered * priceEach;

      

    4.order by 与自定义排序

      ORDER BY子句允许使用FIELD()函数为列中的值定义自己的自定义排序顺序。  

      如果要按以下顺序基于以下状态的值对订单进行排序:

        In Process
        On Hold
        Cancelled
        Resolved
        Disputed
        Shipped

       可以使用FIELD()函数将这些值映射到数值列表,并使用数字进行排序; 请参阅以下查询:

    SELECT 
        orderNumber, status
    FROM
        orders
    ORDER BY FIELD(status,
            'In Process',
            'On Hold',
            'Cancelled',
            'Resolved',
            'Disputed',
            'Shipped');

       

      注意的是FIELD函数中又一个status字段。

    二:order by用自然语言排序

    1.新建表

    CREATE TABLE IF NOT EXISTS items (
        id INT AUTO_INCREMENT PRIMARY KEY,
        item_no VARCHAR(255) NOT NULL
    );

      

    2.插入数据

    INSERT INTO items(item_no)
    VALUES ('1'),
           ('1C'),
           ('10Z'),
           ('2A'),
           ('2'),
           ('3C'),
           ('20D');

      

    3.查询结果

      当我们查询选择数据并按item_no排序时,得到以下结果:

    SELECT 
        item_no
    FROM
        items
    ORDER BY item_no;

       

      因为这是自然排序。

    4.解决方式

      为了克服这个问题,首先我们将item_no列分成两列:prefix 和 suffix。 prefix列存储item_no的数字部分,suffix列存储字母部分。然后根据这些列对数据进行排序。

    SELECT 
        item_no
    FROM
        items
    ORDER BY CAST(item_no AS UNSIGNED) , item_no;

       

      在这个查询中,首先使用类型转换item_no数据转换为无符号整数。 其次,使用ORDER BY子句对数字进行数字排序,然后按字母顺序排列。

    5.下一个例子

      如果删除表:drop table items

      现在清空表:drop table items

      添加数据:

    INSERT INTO items(item_no)
    VALUES('A-1'),
          ('A-2'),
          ('A-3'),
          ('A-4'),
          ('A-5'),
          ('A-10'),
          ('A-11'),
          ('A-20'),
          ('A-30');

      自然排序:

      

    6.解决方式

    SELECT 
        item_no
    FROM
        items
    ORDER BY LENGTH(item_no) , item_no;

      

      为了得到上面这个结果,可以使用LENGTH函数。 请注意,LENGTH函数返回字符串的长度。 这个做法是首先对item_no数据进行排序,然后按列值排序

    
    
  • 相关阅读:
    我的javascript学习路线图
    Javascript 严格模式
    犀牛书学习笔记(10):模块和命名空间
    犀牛书学习笔记(9):继承
    犀牛书学习笔记(7):定义和使用类或对象
    犀牛书学习笔记(6):理解作用域和作用域链
    犀牛书学习笔记(5):javascript中的对象
    犀牛书学习笔记(4):面向对象(OOP)之回顾JAVA
    犀牛书学习笔记(3):函数
    bug
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7820085.html
Copyright © 2020-2023  润新知