zoukankan      html  css  js  c++  java
  • 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数据进行排序,然后按列值排序

    
    
  • 相关阅读:
    js四舍五入
    文本框只能输入整数,输入其他的自动不显示
    [转]关于C#程序部署到Android
    ajax在火狐中传中文出现乱码的解决方法
    Vue 记录 Cannot read property '_withTask' of undefined
    vs中 VMDebugger未能加载导致异常
    System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
    eclipse中将java项目转换成javaweb项目
    Android之SOAP协议与WebService服务器交互,解决超时的问题
    SymmetricDS 快速和灵活的数据库复制
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7820085.html
Copyright © 2011-2022 走看看