SQL基础——聚合与排序

news2025/1/10 3:59:22

聚合与排序

  • 前言
  • 思维导图
  • 聚合函数
    • 示例表3-1![在这里插入图片描述](https://img-blog.csdnimg.cn/9c286053f87a4ae882bece8128bdcab5.png)
    • 计算表中数据的行数 COUNT函数
      • 示例代码3.1 计算全部数据的行数
        • 执行结果
      • 计算NULL之外的数据的行数
      • 代码示例3.2 计算NULL之外的数据行数
        • 执行结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e0bd957e60f34318afa84a68b261082e.png)
    • 计算合计值SUM
      • 代码示例3.3 计算销售单价的合计值
        • 执行结果
      • 代码示例3.4 计算销售单价和进货单价的合计值
        • 执行结果
    • 计算平均值 AVG
      • 代码示例3.5 计算销售单价的平均值
        • 执行结果
    • 计算最大值和最小值 MAX MIN
      • 代码示例3.6 计算销售单价的最大值和进货单价的最小值
        • 执行结果
      • 代码示例3.7计算登记日期的最大值和最小值
        • 执行结果
    • 使用聚合函数删除重复值(关键字DISTINCT)
      • 代码示例3.8 计算去除重复数据后的数据行数
        • 执行结果
      • 代码示例3.8 先计算数据行数再删除重复数据的结果
        • 执行结果
  • 对表进行分组 GROUP BY
    • GROUP BY子句
      • 语法3.1 使用GROUP BY子句进行汇总
      • 代码示例3.9 按照商品种类统计数据行数
        • 执行结果
    • 聚合键中包含NULL的情况
      • 代码示例3.10 按照进货单价统计数据行数
        • 执行结果
    • 使用WHERE子句时GROUP BY的执行情况
      • 语法3.2 使用WHERE子句和GROUP BY子句进行汇总处理
      • 代码示例3.15 同时使用WHERE子句和GROUP BY子句
        • 执行结果
    • 与聚合函数和GROUP BY子句有关的常见错误
      • 常见错误① ——在SELECT子句中书写了多余的列
      • 常见错误② ——在GROUP BY子句中写了列的别名
      • 常见错误③ —— GROUP BY子句的结果能排序
      • 常见错误④ ——在WHERE子句中使用聚合函数
  • 为聚合结果指定条件 HAVING
    • 语法3.3 HAVING子句
      • 代码示例 3.16 从按照商品种类进行分组的结果中,取出包含的数据行为2行的组
        • 执行结果
    • HAVING子句的构成要素
    • 相对于HAVING子句,更适合写在WHERE子句中的条件
      • 代码示例3.17 将条件写在HAVING子句中的情况
        • 执行结果
      • 代码示例3.18 将条件写在WHERE子句中的情况
        • 执行结果
  • 对查询结果进行排序
    • 语法3.4 ORDER BY 子句
    • 代码示例3.19 按照销售单价由低到高(升序)进行排序
      • 执行结果
    • 指定升序或降序
      • 代码示例3.20 按照销售单价由高到低(降序)进行排序
        • 执行结果
    • 指定多个排序键
      • 代码示例3.21 按照销售单价和商品编号的升序进行排序
        • 执行结果
    • NULL的顺序
    • 在排序键中使用显示用的别名
      • 代码示例3.22 ORDER BY子句中使用列的别名
        • 执行结果
    • ORDER BY子句中可以使用的列
      • 代码示例3.23 SELECT子句中未包含的列也可以在ORDER BY子句中使用
        • 执行结果
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

系统学习SQL的笔记,用于记录学习过程。

思维导图

在这里插入图片描述

聚合函数

通过SQL对数据进行某种操作或计算是需要使用函数,用于汇总的函数成为聚合函数或聚集函数。通俗理解就是将多行汇总为一行。

常用的聚合函数:
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:计算表中数值列中数据的最大值
MIN:求出表中任意列中数据的最小值

示例表3-1在这里插入图片描述

计算表中数据的行数 COUNT函数

示例代码3.1 计算全部数据的行数

SELECT
    COUNT(*) 
FROM
    Product

执行结果

在这里插入图片描述

计算NULL之外的数据的行数

想要计算表中的全部数据的行数时,可以像SELECT COUNT(*)这样使用星号。如果想要得到purchase_price列中非空行数的话,可以像代码示例3.2那样。

代码示例3.2 计算NULL之外的数据行数

SELECT
    count( purchase_price ) 
FROM
    Product

执行结果在这里插入图片描述

注意:COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

计算合计值SUM

代码示例3.3 计算销售单价的合计值

SELECT
    SUM(sale_price)
FROM
    Product

执行结果

在这里插入图片描述

代码示例3.4 计算销售单价和进货单价的合计值

SELECT
    SUM( sale_price ),
    SUM( purchase_price ) 
FROM
    Product

执行结果

在这里插入图片描述
通过SUM(purchase_price)
将进货单价的合计值也一起计算出来了,但有一点需要大家注意。具体的计算过程如下所示。
在这里插入图片描述
由于在“四则运算中如果存在NULL,结果一定是NULL,但是对于所有的聚合函数,如果以列名为参数,那么在计算之前就已经把NULL排除在外了。因此,无论有多少个NULL都会被无视。

注意:聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL

计算平均值 AVG

代码示例3.5 计算销售单价的平均值

SELECT
    AVG( sale_price ) 
FROM
    Product

执行结果

在这里插入图片描述

计算最大值和最小值 MAX MIN

想要计算出多条记录中的最大值或最小值,可以分别使用MAX和MIN函数,它们是英语maximam(最大值)和minimum(最小值)的缩写。

代码示例3.6 计算销售单价的最大值和进货单价的最小值

SELECT
    MAX( sale_price ),
    MIN( purchase_price ) 
FROM
    Product;

执行结果

在这里插入图片描述
注意MAX/MIN函数和SUM/AVG函数有一点不同,SUM/AVG函数只能对数值类型的列使用,而MAX/MIN函数原则上可以使用与任何数据类型的列。

例如对日期类型的列regist_date使用MAX/MIN函数进行计算

代码示例3.7计算登记日期的最大值和最小值

SELECT
    MAX( regist_date ),
    MIN( regist_date ) 
FROM
    Product;

执行结果

在这里插入图片描述
注意:MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。

使用聚合函数删除重复值(关键字DISTINCT)

在示例表3-1中我们可以看到product_type列和销售单价sale_price列的数据中,存在多行数据相同的情况。
拿商品种类来说,表中总共有3种商品共8行数据,其中衣服2行,办公用品2行,厨房用具4行。如果想要计算出商品种类的个数,怎么做比较好呢?可以通过删除重复数据然后再计算数据行。

代码示例3.8 计算去除重复数据后的数据行数

SELECT
    count( DISTINCT product_type ) 
FROM
    Product

执行结果

在这里插入图片描述
注意:这时DISTINCT必须卸载括号中。这时因为必须要在计算行数之前删除product_type列中的重复数据。如果卸载括号外的话,就会先计算数据行数,然后再删除数据,结果就得到了product_type列的所有行数。

代码示例3.8 先计算数据行数再删除重复数据的结果

SELECT DISTINCT
    count( product_type ) 
FROM
    Product

执行结果

在这里插入图片描述
注意:想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
不仅限于COUNT函数,所有的聚合函数都可以使用DISTINCT。

对表进行分组 GROUP BY

使用GROUP BY子句可以像切蛋糕那样将表分割。通过使用聚合函数和GROUP BY子句,可以根据“商品种类”或者“登记日期”等将表分割后再进行汇总。

GROUP BY子句

语法3.1 使用GROUP BY子句进行汇总

SELECT
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    …… 
FROM
    <表名> 
GROUP BY
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    ……;

代码示例3.9 按照商品种类统计数据行数

select  product_type, count(*)
FROM Product
GROUP BY product_type

执行结果

在这里插入图片描述
GROUP BY子句就向切蛋糕那样将表进行了分组,分组之后在进行计算行数。在GROUP BY子句中指定的列成为聚合键或分组列。

注意:GROUP BY子句的书写位置也有严格要求,一定要写在FROM语句之后(如果有WHERE子句的话需要写在WHERE子句之后)
SQL子句的顺序不能改变,也不能互相替换。

聚合键中包含NULL的情况

将进货单价purchase_price作为聚合键对表进行切分。

代码示例3.10 按照进货单价统计数据行数

SELECT
    purchase_price,
    COUNT(*) 
FROM
    Product 
GROUP BY
    purchase_price;

执行结果

在这里插入图片描述
当聚合键中包含NULL时,也会将NULL作为一组特定的数据。

使用WHERE子句时GROUP BY的执行情况

语法3.2 使用WHERE子句和GROUP BY子句进行汇总处理

SELECT
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    …… 
FROM
    <表名> 
WHERE
    
GROUP BY
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    ……;

像这样使用WHERE子句进行汇总处理时,会先根据WHERE子句指定的条件进行过滤,然后再进行汇总处理。

代码示例3.15 同时使用WHERE子句和GROUP BY子句

SELECT
    purchase_price,
    COUNT(*) 
FROM
    Product 
WHERE
    product_type = '衣服' 
GROUP BY
    purchase_price;

执行结果

在这里插入图片描述
注意当GROUP BY 与WHERE并用时,SELECT语句的执行顺序
FROM→ WHERE→ GROUP BY→ SELECT

与聚合函数和GROUP BY子句有关的常见错误

常见错误① ——在SELECT子句中书写了多余的列

再使用聚合函数时,SELECT子句中只能存在以下三种元素。
常数、聚合函数、GROUP BY 子句中制定的列名(聚合键)

这里经常会出现的错误就是把聚合键以外的列名书写在SELECT子句中。

常见错误② ——在GROUP BY子句中写了列的别名

GROUP BY子句中使用列的别名会引发错误,原因是SQL语句在DBMS内部执行顺序造成的,由于SELECT子句在GROUP BY子句之后执行,在执行GROUP BY时,并不知道SELECT中的别名。

常见错误③ —— GROUP BY子句的结果能排序

GROUP BY 子句的结果都是无序的

常见错误④ ——在WHERE子句中使用聚合函数

只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。

为聚合结果指定条件 HAVING

使用COUNT函数等对表中数据进行汇总操作时,为其指定条件的不是WHERE子句,而是HAVING
子句。
WHERE子句用来指定数据行的条件,HAVING子句用来指定分组的条件。

语法3.3 HAVING子句

SELECT
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    …… 
FROM
    <表名> 
GROUP BY
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    …… 
HAVING
    <分组结果对应的条件>

注意:HAVING子句必须写在GROUP BY子句之后,其在DBMS内部的执行顺序也排在GROUP BY子句之后。

代码示例 3.16 从按照商品种类进行分组的结果中,取出包含的数据行为2行的组

SELECT
    product_type,
    COUNT(*) 
FROM
    Product 
GROUP BY
    product_type
HAVING COUNT(*) = 2

执行结果

在这里插入图片描述

HAVING子句的构成要素

HAVING子句和包含GROUP BY子句时的SELECT子句一样,能够使用的要素有一定的限制,限制内容也是完全相同的。HAVING子句中能够使用的3中要素。

常数、聚合函数、GROUP BY 子句中制定的列名(聚合键)

相对于HAVING子句,更适合写在WHERE子句中的条件

有些条件既可以写在HAVING子句中,又可以写在WHERE子句中,这些条件就是聚合键所对应的条件。例如:

代码示例3.17 将条件写在HAVING子句中的情况

SELECT
    product_type,
    COUNT(*) 
FROM
    Product 
GROUP BY
    product_type
 HAVING product_type = '衣服';

执行结果

在这里插入图片描述

代码示例3.18 将条件写在WHERE子句中的情况

SELECT
    product_type,
    COUNT(*) 
FROM
    Product 
WHERE
    product_type = '衣服' 
GROUP BY
    product_type;

执行结果

在这里插入图片描述

注意:从结果上看,两种书写方式都没有问题,但是WHERE子句和HAVING子句的作用不同,HAVING子句用来指定组的条件,行所对应的条件还是应该写在WHRER子句当中。这样书写出来的SELECT语句不但可以分清两者各自的功能,理解起来也更加容易。
WHERE子句 = 指定行所对应的条件
HAVING子句 = 指定组所对应的条件

注意:WHERE子句和HAVING子句的执行速度
通过WHERE子句指定条件时,由于排序之前就对数据进行了过滤,因此能够减少排序的数据量。但HAVING子句是在排序之后才对数据进行分组的,因此与在WHERE子句中指定条件比起来,需要排序的数据量就会多得多此外,WHERE子句更具速度优势的另一个理由是,可以对WHERE子句指定条件所对应的列创建索引,这样也可以大幅提高处理速度。

对查询结果进行排序

使用ORDER BY子句对查询结果进行排序。在ORDER BY子句中列名的后面使用关键字ASC可以进行升序排序,使用DESC关键字可以进行降序排序。

通常,从表中选取数据时,如果没有特别指定顺序,最终排列顺序便无从得知。及时同一条SELECT语句,每次执行时排列顺序很磕碜发生变化。可以在SELECT语句末尾添加ORDER BY来明确指定排序。

语法3.4 ORDER BY 子句

SELECT
    <列名 1 >,
    <列名 2 >,
    <列名 3 >,
    …… 
FROM
    <表名> 
ORDER BY
    <排序基准列 1 >,
    <排序基准列 2 >,
    ……

代码示例3.19 按照销售单价由低到高(升序)进行排序

SELECT
    product_id,
    product_name,
    sale_price,
    purchase_price 
FROM
    Product 
ORDER BY
    sale_price;

执行结果

在这里插入图片描述
注意:不论何种情况,ORDER BY子句都需要写在SELECT语句的末尾。这是因为对数据行进行排序的操作必须在结果即将返回时执行。ORDER BY子句中书写的列名称为排序键。

注意:子句的书写顺序
SELECT子句 → 2. FROM子句 → 3. WHERE子句 → 4. GROUP BY子句 → 5. HAVING子句 → 6. ORDER BY子句

指定升序或降序

ORDER BY 默认升序(ASC),在列名后面使用DESC关键字表示降序

代码示例3.20 按照销售单价由高到低(降序)进行排序

SELECT
    product_id,
    product_name,
    sale_price,
    purchase_price 
FROM
    Product 
ORDER BY
    sale_price DESC;

执行结果

在这里插入图片描述

指定多个排序键

如果想要对该顺序的商品进行更细致的排序的话,就需要再添加一个排序键。

代码示例3.21 按照销售单价和商品编号的升序进行排序

SELECT
    product_id,
    product_name,
    sale_price,
    purchase_price 
FROM
    Product 
ORDER BY
    sale_price,
    product_id;

执行结果

在这里插入图片描述
可以在ORDER BY
子句中同时指定多个排序键了。规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键

NULL的顺序

排序键中包含NULL时,会在开头或末尾进行汇总

在排序键中使用显示用的别名

ORDER BY子句中却是允许使用别名的

代码示例3.22 ORDER BY子句中使用列的别名

SELECT
    product_id AS id,
    product_name,
    sale_price AS sp,
    purchase_price 
FROM
    Product 
ORDER BY
    sp,
    id;

执行结果

在这里插入图片描述
在GROUP BY子句中不能使用SELECT子句中定义的别名,但是在ORDER BY子句中却是允许使用别名的。

ORDER BY子句中可以使用的列

ORDER BY子句中也可以使用存在于表中、但并不包含在SELECT子句之中的列

代码示例3.23 SELECT子句中未包含的列也可以在ORDER BY子句中使用

SELECT
    product_name,
    sale_price,
    purchase_price 
FROM
    Product 
ORDER BY
    product_id;

执行结果

在这里插入图片描述
注意:除此之外,在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【DevOps实战系列】第五章:基于Gitlab/Maven/Jenkins/Docker实战案例详解

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 从创建Jenkins的job开始 1.gitlab设置&#xff1a; 我们从新建一个jenkins任务开始&#xff0c;建一个自由风格项目&#xff0c;我们暂时只让他能拉取git的代码。 路径&#xff1a;从gitlab上新…

【ML笔记】5、支持向量机(SVM)

支持向量机&#xff08;SVM&#xff09;是一个强大的和通用的ML模型&#xff0c;能够执行分类&#xff0c;回归&#xff0c;甚至异常值检测&#xff0c;特别适合于复杂的中小型数据集。 1、线性SVM分类 我们可以看到&#xff0c;这两个类可以很容易地用一条直线(线性可分)分开…

GAN入门知识

GAN入门知识 结构 正式说 GAN 之前我们先说一下判别式模型和生成式模型。 判别器 判别式模型 判别式模型&#xff0c;即 Discriminative Model&#xff0c;又被称为条件概率模型&#xff0c;它估计的是条件概率分布(conditional distribution)&#xff0c; p(class|context) 。…

图书网上商店

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1

docker-compose安装部署kafka

文章目录前言一、环境信息二、准备部署1.准备路径2.安装docker-compse&#xff0c;下载镜像3.生成yml文件2.执行部署三、登陆页面前言 记录一下使用docker-compose部署kafka平台的过程 参考&#xff1a;https://blog.csdn.net/QQ83512272/article/details/126368978 一、环境信…

Socket Websocket 客户端和服务端实现

最近在写一个上位机&#xff0c;用到了Websocket&#xff0c;这里就整理一下&#xff0c;顺便把Socket的东西也整理的了&#xff0c;方便以后查阅。 Socket Websocket 客户端和服务端实现Socket客户端和服务端实现Socket客户端Socket服务端实现效果Websocket 客户端和服务端实现…

QT Linux环境搭建——VM虚拟机和Ubuntu的安装

1、从ubuntu官网上下载iso镜像文件&#xff0c;该镜像文件用于安装linux操作系统&#xff0c;以下微官网链接 Enterprise Open Source and Linux | Ubuntu 选择一个最新的稳定版本下载即可&#xff08;好处是&#xff0c;不需要像一些别的网站&#xff0c;必须要注册&#xff…

基于java+springmvc+mybatis+vue+mysql的远程家庭健康监测管理系统小程序

项目介绍 本系统采用java语言开发&#xff0c;后端采用ssm框架&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。 前台&#xff1a; 登录注册、查看个人信息、留言反馈、查看健康信息、查看百科、社区交流 后台&#xff1a; 首页、个人中心、用户管理、…

陈天老师的Rust培训(2)学习笔记

所有权&#xff1a; Rust中的每一个值都有一个被称为其 所有者&#xff08;owner&#xff09;的变量值在任一时刻有且只有一个所有者。当所有者(变量)离开作用域的时候&#xff0c;这个值将被丢弃。 Copy的类型&#xff1a; 所有整数类型&#xff0c;比如u32。布尔类型所有浮…

本地springboot jar 部署到云服务器linux [安装jdk 安装msyql]

A). 安装jdk 参考博客CentOS 8 安装 JAVA 三种方式(yum / rpm / tar.gz) [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep java [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep jdk [rootiZt4ned91xzjstx1s6ftjvZ local]# rpm -qa |grep jre [rootiZt4ned91xzjstx…

bug:解决java.security.InvalidKeyException: Illegal key size or default parameters

bug:解决java.security.InvalidKeyException: Illegal key size or default parameters 1 复现 今天对接外链需要使用AES加密的时候&#xff0c;对方使用的是AES&#xff1a;AES/ECB/PKCS7Padding&#xff0c;但是在加密过程中&#xff0c;发现报错 报错信息&#xff1a;java.…

Spark Shell 的使用

Spark Shell 的使用 Spark shell 作为一个强大的交互式数据分析工具&#xff0c;提供了一个简单的方式学习 API。它可以使用 Scala&#xff08;在Java 虚拟机上运行现有的Java库的一个很好方式&#xff09;或 Python。 Spark Shell 命令 启动 Spark Shell 的时候我们可以指定…

JavaIO

CPU指令与内核态、用户态 在操作系统中&#xff0c;CPU负责执行指令,这些指令有些来自应用程序&#xff0c;有些是来自底层系统。 有些指令是非常危险的&#xff0c;如清除内存&#xff0c;网络连接等等&#xff0c;如果错误调用的话有可能导致系统崩溃。 因而CPU将指令分为特…

Excel表格的打开密码如何设置和取消?

给Excel表格设置“打开密码”是保护表格的其中一种方法&#xff0c;这样只有输入正确的密码才能打开表格。 那Excel表格的打开密码如何设置和取消呢&#xff1f; 首先&#xff0c;打开Excel表格&#xff0c;点击菜单栏的【文件】选项&#xff0c;然后依次选择【信息】-【保护…

java项目-第175期ssm高校校园点餐系统-java毕业设计

java项目-第175期ssm高校校园点餐系统-java毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm高校校园点餐系统》 该项目分为2个角色&#xff0c;管理员、用户和食堂。 用户可以浏览前台,查看菜品&#xff0c;并进行预约和选座&#xff1b; 同时可以跳转到后台查看自己…

基于jsp+mysql+ssm矿场仓储管理系统-计算机毕业设计

项目介绍 本系统采用了BS架构&#xff0c;利用web技术实现了矿场信息的后台管理&#xff0c;针对矿物质的相关信息&#xff0c;销售情况进行管理。是一款后台信息管理系统&#xff0c;具有管理员和员工两个用户权限&#xff0c;系统设计简单&#xff0c;主要是学习资源&#x…

[R语言]正态分布

目录 分布 连续型变量的分布 正态分布 正态分布的推导 正态分布密度曲线 dnorm 正态分布的概率计算 正态分布累积曲线 总体分位数和尾概率 正态分布案例之一 R语言正态分布函数 正态分布相应的概率计算 正态分布的检验 shapiro.test()函数 Kolmogorov-Smirnov连续…

5.3 10篇美食类小红书爆文拆解【玩赚小红书】

案例一&#xff1a;金牌保姆分享12个万能做饭小技巧 ​ 标题&#xff1a; 万能做饭小技巧这个词可以看的出这个方法都是偏向技巧类&#xff0c;对于人人都有做饭的需求来说&#xff0c;也忍不住让人想看看到底是什么内容。“金牌保姆”四个字可谓是将“万能”这2个字完美诠释&…

首次曝光,Alibaba大佬手撸堪称神级的SpringSecurity全彩手册

有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台难进&a…

2023年你应该了解的五大采购管理趋势

采购的未来看起来非常具有前景。随着新技术的出现&#xff0c;采购专业人员有许多新的机会来简化他们的工作并节省企业的资金。 以下是一些你应该了解的2023年采购领域趋势。 1、自动化 采购的最大趋势之一是各种任务的自动化。这可以是任何事情&#xff0c;从自动化询价&am…