当前位置: 首页 > news >正文

订单数据解密:从数据来源到状态分析的SQL实战指南

一、订单数据的 “起点”:FROM 子句的核心作用

1.1 FROM 子句的本质:指定数据来源

在 SQL 的世界里,想要对数据进行查询、分析,首先得知道数据从哪里来,而 FROM 子句就承担着这个 “指明方向” 的关键角色。它是 SQL 查询语句的起始点,用于明确数据的来源,可以是单个数据表,也能是复杂的视图 ,核心语法如下:

SELECT 列名1, 列名2

FROM 表名或视图名;

在订单数据的分析场景中,FROM 子句发挥着不可替代的作用。假设我们有一张名为orders的订单表,表中包含了订单编号order_id、客户 IDcustomer_id、订单金额order_amount、下单时间order_time等字段。如果我们想要查询所有订单的订单编号和订单金额,SQL 语句就可以写成:

SELECT order_id, order_amount

FROM orders;

这段代码里,FROM orders明确了数据是从orders表中获取的,然后通过SELECT关键字挑选出我们关注的order_idorder_amount这两列数据。

当分析的业务逻辑变得复杂,涉及多个维度的数据时,就可能需要从多个表中获取数据。例如,除了orders订单表,还有一张customers客户表,包含客户 IDcustomer_id、客户姓名customer_name、客户联系方式customer_contact等字段。现在我们不仅要查询订单编号和订单金额,还想知道每个订单对应的客户姓名,这就需要关联这两张表,代码如下:

SELECT o.order_id, o.order_amount, c.customer_name

FROM orders o

JOIN customers c ON o.customer_id = c.customer_id;

这里的FROM orders o JOIN customers c ON o.customer_id = c.customer_id就是在多表关联的场景下,FROM 子句联合 JOIN 操作,清晰地指定了数据来源是orders表和customers表,并通过ON o.customer_id = c.customer_id这个条件来建立两张表之间的关联关系,确保每个订单能准确匹配到对应的客户信息。

1.2 实战场景:多数据源订单整合

在实际的业务场景中,公司可能在不同的区域有多个店铺,每个店铺都有自己的订单记录。为了全面了解公司整体的销售情况,需要将各个店铺的订单数据整合起来进行分析。

比如,我们要分析 2024 年第一季度各店铺的订单总金额,涉及到订单表orders和店铺信息表stores。订单表orders中包含订单 IDorder_id、店铺 IDstore_id、订单金额order_amount、下单时间order_time等字段;店铺信息表stores中包含店铺 IDstore_id、店铺名称store_name、店铺所在城市store_city等字段。

关键点在于通过FROM子句联合JOIN操作来明确数据来源,确保订单与店铺信息一一对应,SQL 语句如下:

SELECT s.store_name, SUM(o.order_amount) AS total_amount

FROM orders o

JOIN stores s ON o.store_id = s.store_id

WHERE o.order_time BETWEEN '2024-01-01' AND '2024-03-31'

GROUP BY s.store_name;

在这段代码中,FROM orders o JOIN stores s ON o.store_id = s.store_id指定了数据来源于orders订单表和stores店铺信息表,并通过store_id建立关联。WHERE o.order_time BETWEEN '2024-01-01' AND '2024-03-31'用于筛选出 2024 年第一季度的订单数据。最后,GROUP BY s.store_name按照店铺名称进行分组,SUM(o.order_amount) AS total_amount计算每个店铺的订单总金额。这样,就能清晰地得到 2024 年 Q1 各店铺的订单总金额情况,为企业的销售分析和决策提供有力的数据支持 。通过这个实战场景可以看出,FROM 子句在多数据源订单整合中起到了基础且关键的作用,是后续数据分析和处理的基石。

二、订单状态的 “语言”:order_status 字段设计与查询

2.1 状态字段的设计原则

(1)数据类型选择

在设计order_status字段时,数据类型的选择至关重要,它直接影响到数据的存储效率、查询性能以及系统的扩展性。常见的数据类型有 ENUM 类型和 TINYINT + 状态表的组合方式 ,它们各有优劣,适用于不同的业务场景。

  1. ENUM 类型(状态固定且较少):ENUM 类型是一种枚举类型,它允许我们定义一个固定的取值列表,字段的值只能从这个列表中选取。在订单状态的场景中,如果订单状态相对固定且数量较少,比如只有 “待支付”“已发货”“已送达”“已取消” 这几种状态,使用 ENUM 类型是个不错的选择。

以 MySQL 数据库为例,创建包含 ENUM 类型order_status字段的订单表orders的 SQL 语句如下:

CREATE TABLE orders (

    order_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_id INT NOT NULL,

    order_amount DECIMAL(10, 2) NOT NULL,

    order_status ENUM('pending', 'shipped', 'delivered', 'canceled') NOT NULL DEFAULT 'pending',

    order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

使用 ENUM 类型的优点很明显,它在存储时非常紧凑,只需要 1 - 2 个字节来存储每个值,因为它实际存储的是枚举值的索引,而不是字符串本身,这大大节省了存储空间。同时,由于取值范围固定,数据库在进行数据校验和查询优化时也更加高效。但 ENUM 类型也有局限性,一旦定义好枚举值列表,后续如果需要添加新的状态,就需要修改表结构,这在生产环境中可能是比较麻烦的操作,所以它更适合状态相对稳定的业务场景。

2. TINYINT + 状态表(状态需动态扩展):当订单状态可能会随着业务发展不断变化,或者状态数量较多时,使用 TINYINT 类型结合状态表的方式更为合适。TINYINT 是一种整数类型,占用 1 个字节,可以存储 - 128 到 127(无符号时为 0 到 255)的整数值 。我们可以用不同的整数值来代表不同的订单状态,然后通过一个单独的状态表来维护状态值和状态名称的对应关系。

例如,先创建状态表order_status_table

CREATE TABLE order_status_table (

    status_id TINYINT PRIMARY KEY,

    status_name VARCHAR(50) NOT NULL

);

INSERT INTO order_status_table (status_id, status_name) VALUES

(1, 'pending'),

(2,'shipped'),

(3, 'delivered'),

(4, 'canceled'),

(5, 'processing'); -- 新增状态,只需要在状态表中插入记录

再创建订单表orders

CREATE TABLE orders (

    order_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_id INT NOT NULL,

    order_amount DECIMAL(10, 2) NOT NULL,

    order_status TINYINT NOT NULL DEFAULT 1,

    order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    FOREIGN KEY (order_status) REFERENCES order_status_table(status_id)

);

这种方式的优势在于,当业务需求变化需要添加新的订单状态时,只需要在order_status_table状态表中插入一条新记录即可,无需修改订单表orders的结构,极大地提高了系统的扩展性。同时,通过外键关联状态表,也能保证数据的完整性和一致性 。不过,使用这种方式在查询时可能需要多表关联,相比 ENUM 类型的单表查询,性能上会有一定的损耗,所以在实际应用中需要根据业务的具体情况进行权衡。

(2)状态值的业务含义

理解order_status字段中不同状态值的业务含义是进行订单管理和数据分析的基础,下面以常见的订单状态值为例进行说明:

状态值(ENUM)

含义

业务场景举例

pending

待支付

用户下单未付款

shipped

已发货

商品已出库运输

delivered

已送达

用户签收完成

当用户在电商平台上下单后,订单状态会被标记为 “pending”,表示等待用户支付订单金额。在这个状态下,商家可以为用户保留商品库存,但不会进行发货操作。比如,用户在某购物平台购买了一部手机,下单后未完成支付,此时订单在数据库中的order_status字段值就是 “pending”。

当用户完成支付后,商家会处理订单并发货,这时订单状态会更新为 “shipped”。以快递发货为例,商品从仓库出库,交给快递公司运输,订单就处于已发货状态,在物流信息系统中,对应的订单记录order_status字段值变为 “shipped”,用户可以根据快递单号查询商品的运输进度。

当商品成功送达用户手中,并且用户完成签收后,订单状态会被更新为 “delivered”,表示整个订单流程完成。例如,快递员将手机送到用户手中,用户签字确认收货,电商系统会将该订单的order_status字段值更新为 “delivered”,此时商家可以确认收入,用户也可以对商品进行评价等后续操作。 这些状态值清晰地反映了订单在整个生命周期中的不同阶段,通过对order_status字段的监控和分析,企业可以更好地管理订单流程,提高客户满意度,优化供应链等。

2.2 状态筛选:精准定位订单阶段

在实际的业务分析中,我们经常需要根据订单状态进行筛选,以便获取特定阶段的订单数据。例如,统计某个时间段内 “已发货” 和 “已送达” 的订单数量,这时就可以使用 SQL 中的筛选条件来实现。假设我们使用的是前文创建的包含 ENUM 类型order_status字段的orders订单表,要统计 2024 年 5 月 “已发货”(shipped)和 “已送达”(delivered)的订单数量,SQL 语句如下:

SELECT COUNT(*) AS order_count

FROM orders

WHERE order_status IN ('shipped', 'delivered')

  AND order_time BETWEEN '2024-05-01' AND '2024-05-31';

这里使用了 IN 操作符,它允许我们在一个条件中指定多个值进行匹配,order_status IN ('shipped', 'delivered')表示筛选出order_status字段值为 “shipped” 或者 “delivered” 的订单记录。AND order_time BETWEEN '2024-05-01' AND '2024-05-31'则是进一步限定筛选条件,只统计 2024 年 5 月的订单。

  1. 技巧:使用 IN 操作符批量筛选状态,避免重复编写 OR 条件:在上述查询中,如果不使用 IN 操作符,而是使用 OR 条件来实现相同的筛选效果,SQL 语句会变得冗长且难以维护,如下所示:

SELECT COUNT(*) AS order_count

FROM orders

WHERE (order_status ='shipped' OR order_status = 'delivered')

  AND order_time BETWEEN '2024-05-01' AND '2024-05-31';

对比可以发现,使用 IN 操作符不仅使代码更加简洁易读,而且在需要添加或删除筛选状态时,只需要在 IN 列表中进行修改,而不需要在多个 OR 条件中逐一调整,大大提高了代码的可维护性。同时,在某些数据库引擎中,IN 操作符可能会有更好的查询优化策略,执行效率更高,所以在进行多值筛选时,优先考虑使用 IN 操作符可以提升 SQL 查询的质量和性能 。通过这种精准的订单状态筛选,企业能够快速获取关键数据,为物流调度、客户服务等业务环节提供有力的数据支持,提升整体运营效率。

三、深度分析:FROM 与 order_status 的组合实战

3.1 订单来源与状态的交叉分析

在电商业务中,深入分析订单来源与状态之间的关系,能为企业优化运营策略、提升客户服务水平提供有力的数据支持。以分析 “华南地区” 店铺中,状态为 “已取消” 的订单占比为例,我们来看看如何运用 SQL 语句实现这一复杂的业务需求。

假设我们有两张表,orders订单表包含订单 IDorder_id、店铺 IDstore_id、订单状态order_status等字段;stores店铺表包含店铺 IDstore_id、店铺名称store_name、店铺所在地区store_area等字段 。要实现这一分析,核心逻辑是通过FROM关联订单与店铺表,结合order_status筛选,计算特定地区的取消订单占比,SQL 语句如下:

WITH region_orders AS (

    SELECT o.order_id, o.order_status, s.store_area

    FROM orders o

    JOIN stores s ON o.store_id = s.store_id

)

SELECT

    COUNT(CASE WHEN ro.order_status = 'canceled' THEN 1 END) / COUNT(*) AS canceled_order_ratio

FROM region_orders ro

WHERE ro.store_area = '华南地区';

在这段代码中,首先使用 CTE(Common Table Expression,公用表表达式)创建了一个名为region_orders的临时结果集。在region_orders中,通过FROM orders o JOIN stores s ON o.store_id = s.store_idorders订单表和stores店铺表进行关联,获取到每个订单对应的店铺地区信息 。然后,在主查询中,通过COUNT(CASE WHEN ro.order_status = 'canceled' THEN 1 END) / COUNT(*)来计算取消订单占比。COUNT(CASE WHEN ro.order_status = 'canceled' THEN 1 END)统计状态为 “已取消” 的订单数量,COUNT(*)统计 “华南地区” 的总订单数量,两者相除得到取消订单占比 。通过这样的分析,企业可以了解到华南地区订单取消的情况,进一步探究取消原因,比如是否是商品缺货、物流问题还是客户自身原因等,从而针对性地采取措施,降低订单取消率,提高销售业绩。

3.2 状态流转:追踪订单生命周期

订单从产生到完成,会经历多个状态的流转,如 “待支付”“已支付”“已发货”“已送达” 等。统计用户从 “待支付” 到 “已支付” 的平均耗时,对于优化支付流程、提升用户体验以及资金回笼效率都具有重要意义。

假设订单表orders中包含订单 IDorder_id、订单状态order_status、订单状态更新时间status_update_time等字段,我们可以通过CASE语句按状态提取时间,结合FROM子查询实现状态流转分析 。关键点在于准确提取 “待支付” 和 “已支付” 状态的时间,并计算两者的时间差,SQL 语句如下:

WITH status_time AS (

    SELECT

        order_id,

        CASE

            WHEN order_status = 'pending' THEN status_update_time

            ELSE NULL

        END AS pending_time,

        CASE

            WHEN order_status = 'paid' THEN status_update_time

            ELSE NULL

        END AS paid_time

    FROM orders

)

SELECT

    AVG(TIMESTAMPDIFF(SECOND, st.pending_time, st.paid_time)) AS avg_pending_to_paid_time

FROM status_time st

WHERE st.pending_time IS NOT NULL AND st.paid_time IS NOT NULL;

在这个查询中,首先使用 CTE 创建了status_time临时结果集。在status_time中,通过CASE语句分别提取出订单状态为 “pending”(待支付)和 “paid”(已支付)时的status_update_time状态更新时间 。然后,在主查询中,使用AVG(TIMESTAMPDIFF(SECOND, st.pending_time, st.paid_time))来计算平均耗时。TIMESTAMPDIFF(SECOND, st.pending_time, st.paid_time)计算从 “待支付” 到 “已支付” 的时间差,单位为秒,AVG函数则计算所有符合条件订单的平均时间差 。通过这样的分析,企业可以发现支付环节中可能存在的问题,比如支付流程是否繁琐、支付渠道是否稳定等,进而优化支付流程,缩短支付周期,提高用户满意度和资金周转率 。

四、最佳实践:提升订单数据分析效率

4.1 状态字段的索引优化

在处理订单数据时,对order_status状态字段进行索引优化是提升查询性能的关键一环,尤其是当数据量逐渐增大时,合理的索引能显著加快查询速度,减少系统响应时间。

  1. 单列索引:对order_status建立单列索引是最基础的优化方式。在数据库中,单列索引是基于单个列创建的索引结构,它能加速与该列相关的查询操作。例如,在 MySQL 数据库中,为orders订单表的order_status字段创建单列索引的 SQL 语句如下:

CREATE INDEX idx_order_status ON orders (order_status);

当我们需要查询特定状态的订单时,如查询所有 “已发货”(shipped)的订单,SQL 语句为:

SELECT * FROM orders WHERE order_status ='shipped';

由于创建了idx_order_status索引,数据库在执行查询时,不需要全表扫描orders表中的每一条记录来判断order_status的值,而是可以直接通过索引快速定位到满足条件的记录,大大提高了查询效率 。这种方式适用于经常根据单一的order_status状态值进行筛选查询的业务场景,比如统计某一状态订单的数量、金额总和等。

2. 复合索引:如果业务中经常需要按照 “状态 + 时间” 等多个条件进行查询,创建复合索引会是更好的选择。复合索引是基于多个列创建的索引,它允许在查询中使用多个列进行搜索和过滤 。假设我们经常需要查询某个时间段内特定状态的订单,如查询 2024 年 6 月所有 “已完成”(completed)的订单,就可以创建一个基于order_statusorder_time的复合索引,SQL 语句如下:

CREATE INDEX idx_status_time ON orders (order_status, order_time);

在创建复合索引时,需要注意索引列的顺序。一般来说,将选择性高(即该列不同值较多)的列放在前面,这样可以提高索引的效率。在上述例子中,如果order_status的不同状态值相对较少,而order_time的取值范围较广,将order_status放在前面更合适。当执行查询语句:

SELECT * FROM orders WHERE order_status = 'completed' AND order_time BETWEEN '2024-06-01' AND '2024-06-30';

数据库能够利用idx_status_time复合索引,快速定位到符合条件的订单记录,因为复合索引可以同时对order_statusorder_time进行匹配筛选,相比单独使用单列索引,查询性能会有更大幅度的提升 。这种方式适用于多条件组合查询的场景,能够有效减少查询时间,提升系统的整体性能。

4.2 状态值的业务友好化

在实际的业务应用中,直接展示order_status字段的原始值(如枚举值或数字代码)可能不太直观,不利于业务人员理解和分析数据。因此,对状态值进行业务友好化处理是非常必要的,这可以提高数据的可读性,方便业务人员进行决策。

  1. 使用 CASE 转换状态显示:在查询订单数据时,可以使用CASE语句对order_status的原始值进行转换,使其以更易读的方式展示。以常见的订单状态为例,假设order_status字段为 ENUM 类型,取值为 “pending”“shipped”“delivered”“canceled”,要将这些状态值转换为中文显示,SQL 查询语句如下:

SELECT order_id,

       CASE order_status

           WHEN 'pending' THEN '待支付'

           WHEN'shipped' THEN '已发货'

           WHEN 'delivered' THEN '已送达'

           WHEN 'canceled' THEN '已取消'

           ELSE '未知状态'

           END AS order_status_cn

FROM orders;

通过上述CASE语句,在查询结果中,order_status_cn列将以中文的形式展示订单状态,业务人员无需再去记忆每个英文状态值的含义,直接就能理解订单的当前状态,大大提高了数据的可读性和易用性 。这种方式在生成报表、展示数据给非技术人员时尤为重要,能够减少沟通成本,避免因对状态值理解不一致而产生的错误。

2. 避免魔法值:在代码和数据库操作中,应尽量避免直接使用魔法值(即未经定义的常量),对于order_status字段也是如此。例如,不应在 SQL 查询或应用程序代码中直接使用枚举值(如 “pending”)或数字代码来表示订单状态,而是通过状态表关联获取可读的状态名 。假设我们有一个order_status_table状态表,包含status_idstatus_name字段,分别存储状态 ID 和状态名称,orders订单表中的order_status字段存储的是status_id。要查询订单信息并获取可读的状态名称,SQL 语句如下:

SELECT o.order_id, s.status_name

FROM orders o

JOIN order_status_table s ON o.order_status = s.status_id;

这样,通过关联order_status_table状态表,查询结果中展示的是易于理解的状态名称,而不是难以记忆的状态 ID 或枚举值。当业务需求发生变化,需要修改或添加订单状态时,只需要在order_status_table状态表中进行操作,而不需要在大量的 SQL 查询语句和应用程序代码中修改魔法值,提高了系统的可维护性和扩展性 。

五、常见问题与避坑指南

5.1 多表关联时的来源混淆

在复杂的订单数据分析场景中,多表关联是常见操作,但如果在使用FROM子句时未明确主表,很容易导致关联逻辑混乱,使查询结果出错或难以理解。

例如,当我们需要查询订单表orders和客户表customers中,客户名为 “张三” 的订单信息时,如果写出如下错误示例代码:

SELECT order_id, customer_name

FROM orders, customers

WHERE customer_name = '张三';

这段代码看似简单,但实际上存在严重问题。它没有明确FROM子句中两个表的关联关系,在执行查询时,数据库会对orders表和customers表进行笛卡尔积操作,即两个表中的每一条记录都会相互组合,然后再根据WHERE条件筛选 。这会导致结果集中包含大量无效数据,不仅查询效率极低,而且结果往往不是我们期望的,因为它无法准确关联每个订单和对应的客户信息 。

正确做法是使用JOIN...ON显式声明关联条件,这样可以清晰地表达表之间的关系,提高查询的可读性和准确性 。修正后的代码如下:

SELECT o.order_id, c.customer_name

FROM orders o

JOIN customers c ON o.customer_id = c.customer_id

WHERE c.customer_name = '张三';

在这段代码中,通过JOIN customers c ON o.customer_id = c.customer_id明确了orders表和customers表之间通过customer_id进行关联 。这样,数据库在执行查询时,会根据这个关联条件准确地匹配每个订单和对应的客户信息,然后再根据WHERE c.customer_name = '张三'筛选出客户名为 “张三” 的订单记录,确保查询结果的正确性和高效性 。在进行多表关联查询时,务必使用JOIN...ON语法清晰地定义表之间的关系,避免因FROM子句不明确而引发的各种问题 。

5.2 状态值的模糊处理风险

在对订单状态进行查询时,不正确的模糊处理方式可能会导致索引失效,从而严重影响查询性能,尤其是在数据量较大的情况下。

例如,假设order_status字段存储的是数值型的状态码,如 1 代表 “待支付”,2 代表 “已发货” 等。如果写出如下错误示例代码:

SELECT * FROM orders WHERE order_status LIKE '1%';

这段代码试图查询所有状态码以 1 开头的订单,看似合理,但实际上存在很大问题。由于LIKE操作符在使用通配符%开头时,数据库无法利用索引进行快速查找,会导致全表扫描 。在订单数据量较大时,全表扫描会消耗大量的时间和资源,使查询效率急剧下降,严重影响系统性能 。

正确做法是根据状态值的数据类型选择合适的筛选方式。对于数值型状态码,应直接使用=IN进行筛选,这样可以充分利用索引,提高查询效率 。如果要查询状态码为 1(待支付)的订单,正确的 SQL 语句应为:

SELECT * FROM orders WHERE order_status = 1;

order_status字段存储的是字符串型状态值,并且需要进行模糊查询时,也要确保索引的有效性 。例如,要查询状态值以 “待” 字开头的订单,应尽量使用前缀匹配,以保证索引能够正常使用,SQL 语句如下:

SELECT * FROM orders WHERE order_status LIKE '待%';

这种方式下,数据库可以利用索引快速定位到满足条件的记录,避免全表扫描,大大提高查询性能 。在处理订单状态的查询时,要根据状态值的数据类型谨慎选择筛选方式,避免因不当的模糊处理导致索引失效,从而保障系统的高效运行 。

六、总结:让订单数据 “说话”

通过 FROM 子句精准定位数据来源,结合 order_status 字段解析订单状态,是电商、物流等行业数据分析的核心能力。掌握以下要点,可显著提升订单分析效率:

  1. 数据来源:善用 FROM+JOIN 整合多表数据,避免孤立分析;
  2. 状态设计:根据业务需求选择 ENUM 或状态表,确保状态值可扩展、易维护;
  3. 查询优化:为高频筛选的 order_status 建立索引,使用 CASE 提升状态可读性。

订单数据的价值,始于清晰的来源追踪,终于精准的状态解析。合理运用 SQL 工具,让每一条订单记录都成为业务决策的有力支撑。

http://www.dtcms.com/a/297803.html

相关文章:

  • 【Python】一些PEP提案(四):scandir、类型约束,异步asyncawait
  • 工业缺陷检测的计算机视觉方法总结
  • Linux文件系统权限
  • 【基于CKF的IMM】MATLAB例程,CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附下载链接
  • 基于ENMeval包的MaxEnt模型参数优化总结
  • C#索引器、接口、泛型
  • 构建跨平台远程医疗系统中的视频通路技术方案探究
  • Java 反射机制详解:从基础到实战,彻底掌握 Class、Method、Field 的动态操作
  • 免模型控制
  • 解决笔记本合盖开盖DPI缩放大小变 (异于网传方法,Win11 24H2)
  • TCP模型,mqtt协议01 day41
  • 全国产8通道250M AD FMC子卡
  • C语言————原码 补码 反码 (试图讲清楚版)
  • 基于粒子群优化的PID控制在药液流量控制系统中的应用
  • 数组相关学习
  • IP证书:构建数字世界知识产权安全防线的基石
  • Jenkins构建间代码变更记录追踪方案
  • JAVA知识点(四):SpringBoot与分布式、微服务架构
  • 从huggingface上下载模型
  • 前端学习日记(十三)
  • Qt 网络编程进阶:HTTP 客户端实现
  • Microsoft-DNN NTLM暴露漏洞复现(CVE-2025-52488)
  • 使用Python绘制金融数据可视化工具
  • ISIS高级特性LSP的分片扩展
  • k8s下springboot-admin 监控服务部署,客户端接入
  • MYSQL高可用集群搭建--docker
  • Go语言环境搭建与VS Code开发配置
  • OneNote 当前无法同步笔记。将继续尝试。 (错误代码: 0xE00009C8 bb0ur)问题解决
  • Qt 与 MySQL 高级应用开发
  • pytorch学习笔记-使用DataLoader加载固有Datasets(CIFAR10),使用tensorboard进行可视化