SQL数据分析聚合及练习

2023-10-27

COUNT 不会考虑具有 NULL 值的行

 

SUM 忽略 NULL 值

 

 

  1. 最早的订单下于何时?
    SELECT MIN(occurred_at) 
    FROM orders;
    
  2. 尝试执行和第一个问题一样的查询,但是不使用聚合函数。
     
    SELECT occurred_at 
    FROM orders 
    ORDER BY occurred_at
    LIMIT 1;
    
  3. 最近的 web_event 发生在什么时候?
    SELECT MAX(occurred_at)
    FROM web_events;
    
  4. 尝试以另一种方式执行上个问题的查询,不使用聚合函数。
    SELECT occurred_at
    FROM web_events
    ORDER BY occurred_at DESC
    LIMIT 1;
    
  5. 算出每个订单在每种纸张上消费的平均 (AVERAGE) 金额,以及每个订单针对每种纸张购买的平均数量。最终答案应该有 6 个值,每个纸张类型平均销量对应一个值,以及平均数量对应一个值。
    SELECT AVG(standard_qty) mean_standard, AVG(gloss_qty) mean_gloss, 
               AVG(poster_qty) mean_poster, AVG(standard_amt_usd) mean_standard_usd, 
               AVG(gloss_amt_usd) mean_gloss_usd, AVG(poster_amt_usd) mean_poster_usd
    FROM orders;
    
  6. 看过视频后,你可能对如何计算中位数感兴趣。虽然这已经超出了目前我们所学的范围,但请尝试探索这个问题:对于所有订单(orders)数据,其total_usd字段的中位数是多少?请注意,构建一个此问题的通用解决方案已经超出了目前所学的课程范围,但我们可以硬写出以下这段代码:
    SELECT *
    FROM (SELECT total_amt_usd
          FROM orders
          ORDER BY total_amt_usd
          LIMIT 3457) AS Table1
    ORDER BY total_amt_usd DESC
    LIMIT 2;
    
    因为订单一共有6912个,因此我们需要第3456和第3457个订单(按total_amt_usd排序)的total_amt_usd字段的平均值。这样就能得出中位数结果,为2482.855。这显然不是一个好办法。如果我们有了新订单,再次计算时就必须修改LIMIT。SQL实际上并不会为我们计算中位数。以上代码使用了一个子查询(SUBQUERY),但你可以使用任何方法找到需要的两个值,然后再求平均即可得到中位数。
  • GROUP BY 可以用来在数据子集中聚合数据。例如,不同客户、不同区域或不同销售代表分组。
     

  • SELECT 语句中的任何一列如果不在聚合函数中,则必须在 GROUP BY 条件中。
     

  • GROUP BY 始终在 WHERE 和 ORDER BY 之间。
     

  • ORDER BY 有点像电子表格软件中的 SORT

在深入了解如何使用 GROUP BY 语句聚合函数之前,需要注意的是,SQL 在 LIMIT 条件之前评估聚合函数。如果不按任何列分组,则结果是 1 行,没有问题。如果按照某列分组,该列中存在大量的唯一值,超出了 LIMIT 上限,则系统会照常计算聚合结果,但是结果中会忽略某些行。

这实际上是比较不错的方式,因为你知道你将获得正确的聚合结果。如果 SQL 将表格裁剪到 100 行,然后进行聚合,结果将完全不同。上述查询的结果超过了 100 行,因此是个很好的示例。使用该 SQL 表格并尝试删掉 LIMIT,然后再次运行查询,看看有哪些变化。

 

 

  1. 哪个客户(按照名称)下的订单最早?你的答案应该包含订单的客户名称日期
    SELECT a.name, o.occurred_at
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    ORDER BY occurred_at
    LIMIT 1;
    
  2. 算出每个客户的总销售额(单位是美元)。答案应该包括两列:每个公司的订单总销售额(单位是美元)以及公司名称
    SELECT a.name, SUM(total_amt_usd) total_sales
    FROM orders o
    JOIN accounts a
    ON a.id = o.account_id
    GROUP BY a.name;
    
  3. 最近的 web_event 是通过哪个渠道发生的,与此 web_event 相关的客户是哪个?你的查询应该仅返回三个值:日期渠道客户名称
    SELECT w.occurred_at, w.channel, a.name
    FROM web_events w
    JOIN accounts a
    ON w.account_id = a.id 
    ORDER BY w.occurred_at DESC
    LIMIT 1;
    
  4. 算出 web_events 中每种渠道的次数。最终表格应该有两列:渠道和渠道的使用次数。
    SELECT w.channel, COUNT(*)
    FROM web_events w
    JOIN accounts a
    ON a.id = w.account_id
    GROUP BY w.channel
    
  5. 与最早的 web_event 相关的主要联系人是谁?
    SELECT a.primary_poc
    FROM web_events w
    JOIN accounts a
    ON a.id = w.account_id
    ORDER BY w.occurred_at
    LIMIT 1;
    
  6. 每个客户所下的最小订单是什么(以总金额(美元)为准)。答案只需两列:客户名称总金额(美元)。从最小金额到最大金额排序。
    SELECT a.name, MIN(total_amt_usd) smallest_order
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name
    ORDER BY smallest_order;
    
    奇怪的是,很多订单没有美元金额。我们可能需要检查下这些订单。
     
  7. 算出每个区域的销售代表人数。最终表格应该包含两列:区域和 sales_reps 数量。从最少到最多的代表人数排序。
    SELECT r.name, COUNT(*) num_reps
    FROM region r
    JOIN sales_reps s
    ON r.id = s.region_id
    GROUP BY r.name
    ORDER BY num_reps;

 

 

  1. 对于每个客户,确定他们在订单中购买的每种纸张的平均数额。结果应该有四列:客户名称一列,每种纸张类型的平均数额一列。
    SELECT a.name, AVG(o.standard_qty) avg_stand, AVG(gloss_qty) avg_gloss, AVG(poster_qty) avg_post
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name;
    
  2. 对于每个客户,确定在每个订单中针对每个纸张类型的平均消费数额。结果应该有四列:客户名称一列,每种纸张类型的平均消费数额一列。
    SELECT a.name, AVG(o.standard_amt_usd) avg_stand, AVG(gloss_amt_usd) avg_gloss, AVG(poster_amt_usd) avg_post
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name;
    
  3. 确定在 web_events 表格中每个销售代表使用特定渠道的次数。最终表格应该有三列:销售代表的名称渠道和发生次数。按照最高的发生次数在最上面对表格排序。
    SELECT s.name, w.channel, COUNT(*) num_events
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.name, w.channel
    ORDER BY num_events DESC;
    
  4. 确定在 web_events 表格中针对每个地区特定渠道的使用次数。最终表格应该有三列:区域名称渠道和发生次数。按照最高的发生次数在最上面对表格排序。
    SELECT r.name, w.channel, COUNT(*) num_events
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    JOIN region r
    ON r.id = s.region_id
    GROUP BY r.name, w.channel
    ORDER BY num_events DESC;

 

  1. 使用 DISTINCT 检查是否有任何客户与多个区域相关联?

    下面的两个查询产生了相同的行数(351 行),因此我们知道每个客户仅与一个区域相关联。如果每个客户与多个区域相关联,则第一个查询返回的行数应该比第二个查询的多。

    SELECT DISTINCT a.id, r.id, a.name, r.name
    FROM accounts a
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    JOIN region r
    ON r.id = s.region_id;
    

    and

    SELECT DISTINCT id, name
    FROM accounts;
    
  2. 有没有销售代表要处理多个客户?

    实际上,所有销售代表都要处理多个客户。销售代表处理的最少客户数量是 3 个。有 50 个销售代表,他们都有多个客户。在第二个查询中使用 DISTINCT 确保包含了第一个查询中的所有销售代表。

    SELECT s.id, s.name, COUNT(*) num_accounts
    FROM accounts a
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.id, s.name
    ORDER BY num_accounts;
    

    and

    SELECT DISTINCT id, name
    FROM sales_reps;

 

HAVING 是过滤被聚合的查询的 “整洁”方式,但是通常采用子查询的方式来实现。本质上,只要你想对通过聚合创建的查询中的元素执行 WHERE 条件,就需要使用 HAVING

  1. 有多少位销售代表需要管理超过 5 个客户?

    SELECT s.id, s.name, COUNT(*) num_accounts
    FROM accounts a
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.id, s.name
    HAVING COUNT(*) > 5
    ORDER BY num_accounts;
    

    实际上,我们可以使用 SUBQUERY 获得这一结果,如下所示。其他查询也可以使用这一逻辑,下面就不显示了。

    SELECT COUNT(*) num_reps_above5
    FROM(SELECT s.id, s.name, COUNT(*) num_accounts
         FROM accounts a
         JOIN sales_reps s
         ON s.id = a.sales_rep_id
         GROUP BY s.id, s.name
         HAVING COUNT(*) > 5
         ORDER BY num_accounts) AS Table1;
    
  2. 有多少个客户具有超过 20 个订单?
     

    SELECT a.id, a.name, COUNT(*) num_orders
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    HAVING COUNT(*) > 20
    ORDER BY num_orders;
    
  3. 哪个客户的订单最多?

    SELECT a.id, a.name, COUNT(*) num_orders
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    ORDER BY num_orders DESC
    LIMIT 1;
    
  4. 有多少个客户在所有订单上消费的总额超过了 30,000 美元?

    SELECT a.id, a.name, SUM(o.total_amt_usd) total_spent
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    HAVING SUM(o.total_amt_usd) > 30000
    ORDER BY total_spent;
    
  5. 有多少个客户在所有订单上消费的总额不到 1,000 美元?

    SELECT a.id, a.name, SUM(o.total_amt_usd) total_spent
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    HAVING SUM(o.total_amt_usd) < 1000
    ORDER BY total_spent;
    
  6. 哪个客户消费的最多?

    SELECT a.id, a.name, SUM(o.total_amt_usd) total_spent
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    ORDER BY total_spent DESC
    LIMIT 1;
    
  7. 哪个客户消费的最少?

    SELECT a.id, a.name, SUM(o.total_amt_usd) total_spent
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.id, a.name
    ORDER BY total_spent
    LIMIT 1;
    
  8. 哪个客户使用 facebook 作为与消费者沟通的渠道超过 6 次?

    SELECT a.id, a.name, w.channel, COUNT(*) use_of_channel
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    GROUP BY a.id, a.name, w.channel
    HAVING COUNT(*) > 6 AND w.channel = 'facebook'
    ORDER BY use_of_channel;
    
  9. 哪个客户使用 facebook 作为沟通渠道的次数最多?

    SELECT a.id, a.name, w.channel, COUNT(*) use_of_channel
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    WHERE w.channel = 'facebook'
    GROUP BY a.id, a.name, w.channel
    ORDER BY use_of_channel DESC
    LIMIT 1;
    
  10. 哪个渠道是客户最常用的渠道?
    SELECT a.id, a.name, w.channel, COUNT(*) use_of_channel
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    GROUP BY a.id, a.name, w.channel
    ORDER BY use_of_channel DESC
    LIMIT 10;

 

 

DATE_TRUNC 使你能够将日期截取到日期时间列的特定部分。常见的截取依据包括日期月份 和 年份。。

DATE_PART 可以用来获取日期的特定部分,但是注意获取 month 或 dow 意味着无法让年份按顺序排列。而是按照特定的部分分组,无论它们属于哪个年份。

 

 

处理日期

  1. Parch & Posey 在哪一年的总销售额最高?数据集中的所有年份保持均匀分布吗?

    SELECT DATE_PART('year', occurred_at) ord_year,  SUM(total_amt_usd) total_spent
    FROM orders
    GROUP BY 1
    ORDER BY 2 DESC;
    

    对于 2013 年和 2017 年来说,每一年只有一个月的销量(2013 年为 12,2017 年为 1)。 因此,二者都不是均匀分布。销量一年比一年高,2016 年是到目前为止最高的一年。按照这个速度,我们预计 2017 年可能是最高销量的一年。
     

  2. Parch & Posey 在哪一个月的总销售额最高?数据集中的所有月份保持均匀分布吗?

    为了保持公平,我们应该删掉 2013 年和 2017 年的销量。原因如上。

    SELECT DATE_PART('month', occurred_at) ord_month, SUM(total_amt_usd) total_spent
    FROM orders
    WHERE occurred_at BETWEEN '2014-01-01' AND '2017-01-01'
    GROUP BY 1
    ORDER BY 2 DESC; 
    

    12 月的销量最高。
     

  3. Parch & Posey 在哪一年的总订单量最多?数据集中的所有年份保持均匀分布吗?

    SELECT DATE_PART('year', occurred_at) ord_year,  COUNT(*) total_sales
    FROM orders
    GROUP BY 1
    ORDER BY 2 DESC;
    

    同样,到目前为止,2016 年的订单量最多,但是与数据集中的其他年份相比,2013 年和 2017 年的分布不均匀。
     

  4. Parch & Posey 在哪一个月的总订单量最多?数据集中的所有年份保持均匀分布吗?
    SELECT DATE_PART('month', occurred_at) ord_month, COUNT(*) total_sales
    FROM orders
    WHERE occurred_at BETWEEN '2014-01-01' AND '2017-01-01'
    GROUP BY 1
    ORDER BY 2 DESC; 
    
    12 月依然是销量最多的月份,但是有趣的是,11 月是销量第二多的月份。为了保持公平,删掉了 2017 年和 2013 年的数据。
     
  5. Walmart 在哪一年的哪一个月在铜版纸上的消费最多?
    SELECT DATE_TRUNC('month', o.occurred_at) ord_date, SUM(o.gloss_amt_usd) tot_spent
    FROM orders o 
    JOIN accounts a
    ON a.id = o.account_id
    WHERE a.name = 'Walmart'
    GROUP BY 1
    ORDER BY 2 DESC
    LIMIT 1;
    
    在 2016 年 5 月,Walmart 在铜版纸上的消费做多。

 

GROUP BY 1,2,3  数字表示按哪一列排序

 

  • CASE 语句始终位于 SELECT 条件中。
     
  • CASE 必须包含以下几个部分:WHEN、THEN 和 END。ELSE 是可选组成部分,用来包含不符合上述任一 CASE 条件的情况。
     
  • 你可以在 WHEN 和 THEN 之间使用任何条件运算符编写任何条件语句(例如 WHERE),包括使用 AND 和 OR 连接多个条件语句。
     
  • 你可以再次包含多个 WHEN 语句以及 ELSE 语句,以便处理任何未处理的条件。

示例

在第一节课的练习中,你看到了以下问题:

  1. 创建一列用于将 standard_amt_usd 除以 standard_qty,以便计算每个订单的标准纸张的单价,将结果限制到前 10 个订单,并包含 id 和 account_id 字段。注意 - 如果你的答案正确,系统将显示一个错误,这是因为你除以了 0。当你在下个部分学习 CASE 语句时,你将了解如何让此查询不会报错。
     

我们来看看如何使用 CASE 语句来避免这一错误。

SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders
LIMIT 10;

现在我们使用一个 CASE 语句,这样的话,一旦 standard_qty 为 0,我们将返回 0,否则返回 unit_price

SELECT account_id, CASE WHEN standard_qty = 0 OR standard_qty IS NULL THEN 0
                        ELSE standard_amt_usd/standard_qty END AS unit_price
FROM orders
LIMIT 10;

该语句的第一部分将捕获任何分母为 0 并导致错误的情况,其他部分将按照常规步骤相除。你将发现对于标准纸张,所有客户的单价是 4.99 美元。这样比较合理,不会波动,并且比在上节课中向分母上加 1 来暂时解决错误这一方法更准确。

方案:CASE

  1. 我们想要根据相关的购买量了解三组不同的客户。最高的一组是终身价值(所有订单的总销售额)大于 200,000 美元的客户。第二组是在 200,000 到 100,000 美元之间的客户。最低的一组是低于 under 100,000 美元的客户。请提供一个表格,其中包含与每个客户相关的级别。你应该提供客户的名称所有订单的总销售额级别。消费最高的客户列在最上面。

    SELECT a.name, SUM(total_amt_usd) total_spent, 
         CASE WHEN SUM(total_amt_usd) > 200000 THEN 'top'
         WHEN  SUM(total_amt_usd) > 100000 THEN 'middle'
         ELSE 'low' END AS customer_level
    FROM orders o
    JOIN accounts a
    ON o.account_id = a.id 
    GROUP BY a.name
    ORDER BY 2 DESC;
    
  2. 现在我们想要执行和第一个问题相似的计算过程,但是我们想要获取在 2016 年和 2017 年客户的总消费数额。级别和上一个问题保持一样。消费最高的客户列在最上面。

    SELECT a.name, SUM(total_amt_usd) total_spent, 
         CASE WHEN SUM(total_amt_usd) > 200000 THEN 'top'
         WHEN  SUM(total_amt_usd) > 100000 THEN 'middle'
         ELSE 'low' END AS customer_level
    FROM orders o
    JOIN accounts a
    ON o.account_id = a.id
    WHERE occurred_at > '2015-12-31' 
    GROUP BY 1
    ORDER BY 2 DESC;
    
  3. 我们想要找出绩效最高的销售代表,也就是有超过 200 个订单的销售代表。创建一个包含以下列的表格:销售代表名称、订单总量和标为 top 或 not 的列(取决于是否拥有超过 200 个订单)。销售量最高的销售代表列在最上面。
    SELECT s.name, COUNT(*) num_ords,
         CASE WHEN COUNT(*) > 200 THEN 'top'
         ELSE 'not' END AS sales_rep_level
    FROM orders o
    JOIN accounts a
    ON o.account_id = a.id 
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.name
    ORDER BY 2 DESC;
    
    值得注意的是,上述语句假定每个名称是唯一的,好几次都是这么假定的。否则需要根据名称和 ID 拆分表格。
     
  4. 之前的问题没有考虑中间水平的销售代表或销售额。管理层决定也要看看这些数据。我们想要找出绩效很高的销售代表,也就是有超过 200 个订单或总销售额超过 750000 美元的销售代表。中间级别是指有超过 150 个订单或销售额超过 500000 美元的销售代表。创建一个包含以下列的表格:销售代表名称、总订单量、所有订单的总销售额,以及标为 topmiddle 或 low 的列(取决于上述条件)。在最终表格中将销售额最高的销售代表列在最上面。
    SELECT s.name, COUNT(*), SUM(o.total_amt_usd) total_spent, 
         CASE WHEN COUNT(*) > 200 OR SUM(o.total_amt_usd) > 750000 THEN 'top'
         WHEN COUNT(*) > 150 OR SUM(o.total_amt_usd) > 500000 THEN 'middle'
         ELSE 'low' END AS sales_rep_level
    FROM orders o
    JOIN accounts a
    ON o.account_id = a.id 
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.name
    ORDER BY 3 DESC;

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL数据分析聚合及练习 的相关文章

随机推荐

  • 使用nginx部署vue项目后,刷新会找不到页面解决解决方法

    当使用Nginx部署Vue项目时 刷新页面可能导致无法找到页面的问题 这是由于Vue Router使用了前端路由的方式导致的 要解决这个问题 你可以进行以下配置 1 在Nginx配置文件中添加一个位置 Location 块来处理所有的URL
  • STL-常用算法(二.拷贝 替换 算术 集合)

    开篇先附上STL 常用算法 一 的链接 STL 常用算法 一 遍历 查找 排序 小梁今天敲代码了吗的博客 CSDN博客 目录 常用拷贝和替换算法 copy函数示例 将v1容器中的元素复制给v2 replace函数示例 将容器中的20 替换成
  • [carla] carla-ros-bridge 修改信号灯行为。

    本教程适用于采用编译下载安装方式安装carla ros bridge 的用户 1 修改信号灯 1 1 修改原理 我们要通过API过滤出所有绿灯的actor信息 然后修改他们的状态为常绿 查阅API网站可知traffic light具有set
  • java获取两个字符串日期之间间隔的天数

    java获取两个字符串日期之间间隔的天数 import java text ParseException import java text SimpleDateFormat import java util ArrayList
  • spyder 如何执行需要命令行参数的脚本

    spyder 如何执行需要命令行参数的脚本 run CTA py splash image C Users XXX Desktop A3 jpg weights D KerasProject MaskRCNN mask rcnn ballo
  • Detectron2入门教程

    参考 Detectron2入门教程 云 社区 腾讯云 目录 1 概述 1 1 自己的源码阅读流程 1 2 目录结构 1 3 搭积木过程 1 4 官方文档阅读 2 数据处理 2 1 概述 2 2 基本流程 2 3 build detectio
  • CoordinatorLayout详解二:

    作为Material Design风格的重要组件 CoordinatorLayout协调多种组件的联动 实现各种复杂的效果 在实际项目中扮演着越来越重要的角色 本篇博客将由浅到深 带你一起玩转CoordinatorLayout 官方文档对C
  • SpringBoot通过HttpClient方式调用Restful接口

    前言 HttpClient相比于传统jdk自带的URLConnection 增加了易用性和灵活性 它不仅是客户端发送http请求变得容易 而且也方便了开发人员测试接口 提高了开发的效率 HttpClient是Apache Jakarta C
  • No Network Security Config specified, using platform default

    报错日志 No Network Security Config specified using platform default 在日志中看 这个并没有报红 但是网络请求不成功 确实是这个引起的 可笑的是 在模拟器上 虽然报了这个警告 但是
  • 免费图片在线压缩网站推荐

    第一种 https img top PNG压缩过后依旧透明太棒 亲测 几乎无损 完全免费界面清新简洁 优点 实用 支持 JPG PNG GIF 等格式无损压缩 缺点 5MB限制 超过5MB无法压缩 第二种 http www 660660 t
  • 启动物联网项目所需的一切:关于流处理

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 在本文中 我们将围绕物联网或流处理系统的一些技术问题建立完整的基础和多方面的理解 以便读者在规划物联网系统时能够做出明智的决策或是有根据地提出问题 我们的意图是为开始考虑流处理和物联
  • Panel三维数据结构丨Pandas数据分析基础(5)

    个人主页 互联网阿星 格言 选择有时候会大于努力 但你不努力就没得选 作者简介 大家好我是互联网阿星 和我一起合理使用Python 努力做时间的主人 如果觉得博主的文章还不错的话 请点赞 收藏 留言 支持一下博主哦 行业资料 PPT模板 简
  • 二叉树的遍历和统计二叉树中度为0、度为1、度为2的结点个数

    文章目录 实验五 树的应用 二叉树的遍历 一 实验目的 1 了解二叉树的逻辑结构和物理结构 2 掌握二叉树数据类型定义 3 熟练掌握二叉树在链式存储结构上的遍历操作 二 实验要求 三 实验任务 四 代码如下 五 实验结果图 实验五 树的应用
  • 重构改善既有代码设计----- 在对象之间搬移特性

    在对象之间搬移特性 常常我们只要使用 搬移函数 搬移字段 就可以解决大部分问题了 再使用两个重构手法时 尽量先使用搬移字段 再搬移函数 如果一个类变得没有足够的逻辑 可以考虑把它内联到一个和它关联最强的类中 如果一个类做的太多的事情 不利于
  • 二进制1010个Pycharm快捷键

    咱们写Python代码 至少得有一半是用 Pycharm 吧 这种傻瓜式的IDE学习成本低 不像VIM拿到手摸不着头脑 如果想让工具发挥出极致的效率 快捷键操作是必不可少的 有时候你敲几行代码 点几下鼠标 别人只要一个组合快捷键就能搞定 不
  • 自然语言处理之文本向量化(词袋模型、TF-IDF)

    目录 1 词袋模型 Bag of words 简称 BoW 2 词频向量化 3 TF IDF处理 3 1 TF 3 2 IDF 4 CountVectorizer与TfidfVectorizer的异同 5 sklearn中TfidfTran
  • Linux下安装配置maven

    参考链接 Linux下安装配置maven 配置maven的setting xml Linux下的复制粘贴等操作 一 Linux下安装配置maven 1 安装wget命令 如果需要通过使用wget命令 直接通过网络下载maven安装包时 需要
  • 计算机专业毕业设计题目哪个简单,计算机专业毕业设计题目计算机专业毕业设计的类型...

    不同的学校院系 不同的指导教师对计算机专业毕业设计有不同的指导方法 在计算机系 本科毕业设计通常以下面四种类型 1完成一个不太大的实际项目或在某一个较大的项目中设计并完成一个模块 如应用软件 工具软件或自行设计的板卡 接口等等 然后以工程项
  • Jeesite框架实用 如何实现本公司内数据权限功能使用

    文章目录 前言 一 数据库中创建一张视图表 非常重要 二 创建自己的表 三 使用jeesite导入表 生成代码 四 在此表生成的 service层中 加上过滤 五 在此表生成的 controller层中查看数据处 加上过滤 六 在此表生成的
  • SQL数据分析聚合及练习

    COUNT 不会考虑具有 NULL 值的行 SUM 忽略 NULL 值 最早的订单下于何时 SELECT MIN occurred at FROM orders 尝试执行和第一个问题一样的查询 但是不使用聚合函数 SELECT occurr