小木的学习日记-SQL数据排序与去重

排序又分为两种,由低到高与由高到底排序。而ORDER BY 便可以实现这个功能

ORDER BY

比如:

查找orders(订单表)中的所有数据,并将查找结果按照total_price(订单价格)升序排列。

升序 ASC

降序 DESC
 

SELECT *
FROM orders
ORDER BY total_price;  (若无明显命令 默认由低到高(ASC))如果是 ORDER BY total_price DESC;则是由高到低

这是ORDER BY total_price DESC;的结果--降序排列

上面操作是针对单列进行排序操作,那如果是多列呢?

SELECT *
FROM orders
ORDER BY total_price,order_time DESC;----这样可以吗???  不可以!!其输出结果是对order_time进行的降序,并没有涉及到total_price
正确的写法应该是
ORDER BY total_price DESC,order_time DESC;

LIMIT--一个关键字,表明对要取的数据的数量进行限制。 

比如LIMIT 10 意思就是我只要10条数据就欧克了

又比如LIMIT 10,3就是表示跳过前 10 个记录从第11个开始向后取 3 条数据。

SELECT *
FROM orders
ORDER BY total_price DESC
LIMIT 10;--只取total_price 的前10条数据;

DISTINCT

(distinct adj --截然不同的)所以他是用来去重的哈哈哈。

SELECT DISTINCT district   去重account_2c表中的district列
FROM account_2c;

简洁版

SQL排序与限制操作详解

一、单列排序规则
  • 升序排列:ORDER BY 列名 ASC 或省略排序方式(默认ASC)
SELECT * FROM orders 
ORDER BY total_price; -- 等价于ORDER BY total_price ASC

  • 降序排列:必须显式声明DESC
SELECT * FROM orders 
ORDER BY total_price DESC;

二、多列组合排序
  • 错误示例ORDER BY total_price,order_time DESC
    该写法仅对最后一个字段生效,等价于:

    ORDER BY total_price ASC, order_time DESC
    

  • 正确写法

    SELECT * FROM orders
    ORDER BY total_price DESC, order_time DESC; -- 双字段均降序
    

    多字段排序时,每个字段需单独指定排序方式,字段优先级按从左到右顺序执行

三、结果集限制
  • 基础限制:LIMIT 数字

    SELECT * FROM orders
    ORDER BY total_price DESC
    LIMIT 10; -- 取价格最高的前10条
    

  • 分页限制:LIMIT 偏移量,数量

    SELECT * FROM orders
    LIMIT 10,3; -- 跳过前10条,取第11-13条(共3条)
    

四、数据去重
  • 单列去重:

    SELECT DISTINCT district 
    FROM account_2c; -- 返回唯一行政区划值
    

  • 多列组合去重:

    SELECT DISTINCT province, district 
    FROM account_2c; -- 返回省份+行政区的唯一组合
    

五、综合应用示例
SELECT DISTINCT province, district 
FROM account_2c
WHERE create_time > '2023-01-01'
ORDER BY province ASC, district DESC
LIMIT 5;

该语句实现:

  1. 筛选2023年后创建的账户
  2. 去除省份+行政区的重复组合
  3. 按省份升序优先排序,同省份按行政区降序排列
  4. 最终取前5条记录

特殊说明:LIMIT 10,3在不同数据库中的实现可能略有差异,MySQL等数据库支持该语法,部分数据库要求使用LIMIT 3 OFFSET 10格式。

Everything that kills me makes me feel alive ——《Counting Stars》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值