许多电脑使用Excel在面对上千行数据时已力不从心,而R较难部署在集群上运行,人眼显然不可能直接从大量数据中总结出规律。如何才能快速理解你的数据集?SQL可以帮助你!...当然,有些需求并不能完全由一般的SQL函数实现。 ? 02 计算分位数 如果数据的分布存在较大的偏斜,平均值并不能告诉我们平均等待时间的分布情况。...主要问题是如何将每天的订单各自按等待时间递增的顺序排序,然后取出其中位数值。在MySQL中我们可以使用局部变量来跟踪订单,在Postgres中,我们可以使用row_number函数: ?...计算结果如下: ? 03 直方图 直方图是大致了解数据分布的好方法。我们可以用以下命令来计算每笔交易收入的分布: ? 由于每个不同的收入都会占用一行,以上命令的结果行数将会非常多。...我们需要将收入值分组以方便我们得到数据分布的大致印象,比如分为$0-$5、$5-$10等组。如何分组并没有一个标准的做法,需要我们自己根据需要,进行实验来选择。
然后,我提出了优化建议,并使用A/B测试方法来验证我的建议的有效性。结果显示,优化后的用户购买率有了显著的提升。” 面试官又问道:“你能解释一下什么是转化率,并且如何计算它吗?”...窗口函数让我能够对数据进行分区和排序,以便更好地理解数据。例如,我使用ROW_NUMBER()函数为每个订单分配一个唯一的序号,以便更好地追踪和分析订单。...首先,我使用窗口函数对销售数据进行分区和排序,以便更好地理解销售人员的业绩。然后,我使用聚合函数计算每个销售人员的总销售额和平均销售额,以便更好地比较他们的业绩。...我回答道:“窗口函数和聚合函数都是用于对数据进行分组和计算的函数,但它们在使用和返回结果方面有所不同。窗口函数用于对数据进行分区和排序,并在每个分区中为每一行返回一个值。...例如,ROW_NUMBER()函数为每个分区中的每一行返回一个唯一的序号。而聚合函数则用于对整个数据集或每个分组的数据进行计算,并返回一个单一的值。
【面试题】 "课程订单表”里记录了某在线教育App的用户购买课程的信息(部分数据截图)。 请使用sql将购买记录表中的信息,提取为下表(复购分析表)的格式。并用一条sql语句写出。...【解题思路】 这是常见的复购问题,也就是将用户按购买时间分组,比较不同时间组的用户复购数。其本质是使用里了群组分析方法,将数据按某些特征进行分类,分成不同的组进行分析。...每日首次购买用户数,表示每一行记录的是当天的购买用户数。 当有“每个”出现的时候,要想到《猴子从零学会SQL》中讲过的用“分组汇总来”来实现。....* from 课程订单表 as a left join 课程订单表 as b on a.用户id = b.用户id; 把上面的联结结果记为临时表c,如何从临时表c中查找出时间间隔(用户第二次购买时间-...(1)这涉及到计算两个日期之间的差值,《猴子从零学会sql》里讲到对应单函数是timestampdiff。下图是这个函数的用法。 select a.
用于在数值数据上进行算术操作的数值函数,如返回绝对值,进行代数运算。 用于处理日期和时间值并从这些值中提取特定成分的日期和时间函数,例如,返回两个日期之差,检查日期有效性等。...分组数据 之前的聚集函数都是在 where 子句查询到的所有数据基础上进行的计算,比如查询某个供应商的产品平均价格,但假如希望分别返回每个供应商提供的产品的平均价格,该怎么处理呢。...比如: 对每个顾客下了多少订单进行计数,包括那些至今尚未下订单的顾客; 列出所有产品以及订购数量,包括没有人订购的产品; 计算平均销售规模,包括那些至今尚未下订单的顾客。...可以从 create.sql 文件最下面看到外键的例子,这里列举一行: # 将订单信息表的 order_num 设置为订单表的外键 alter table orderitems add constraint...如果故障出现在 1 和 2 之间,这没什么关系,因为一个顾客没有订单信息是合法的,如果出现在 3 和 4 之间,那么就会出现一个空的订单,这个订单没有包含的产品信息,这很严重,如果出现在 5 时,添加
6个 窗口函数 函数功能说明 ROW_NUMBER() 根据具体的分组和排序,为每行数据生成一个起始值等于1的唯一序列数 RANK() 对组中的数据进行排名,如果名次相同,则排名也相同,但是下一个名次的排名序号会出现不连续...而下一个排名的序号与上一个排名序号是连续的。 PERCENT_RANK() 计算给定行的百分比排名。...| 注意事项: 在 SQL 查询中使用合适的聚合和窗口函数。 考虑用户进入和离开的时间范围,以计算同时在线人数。 结果应按时间顺序排序。...请编写 Hive SQL 查询,对用户的上网行为进行聚合,将同一个用户的多个上网行为数据进行聚合,如果两次上网时间间隔小于10分钟,就进行聚合。...现在的任务是编写一条 SQL 查询,计算员工薪水的中位数。由于计算中位数需要对数据进行排序和分析,这个问题在 SQL 中相对复杂。你可以使用窗口函数和子查询等技术来解决。
产品明细表”记录了公司产品的详细信息 “销售网点表”记录了公司的销售网点 销售订单表、产品明细表、销售网点表字段之间的关系如下 销售订单表和产品明细表通过“产品”字段关联,销售订单表和销售网点通过...from 销售订单表; 3.客单价 客单价是平均每个用户购买的金额,客单价=总销售金额/用户总数 总销售金额、用户总数在前面我们已经分析出来了,现在计算客单价就简单了,也就是 sum(销售数量*零售价..., sum(销售数量*零售价)/count(distinct 顾客ID) as 客单价 from 销售订单表; 与客单价经常混淆的还有笔单价(平均每笔交易的购买金额), 笔单价=总销售金额/订单总数...但是,问题中还有一个条件,那就是分享下“在2020年度第一季度”的数据 通过条件筛选(where),可以得到符合条件的数据。需要用到日期和时间函数处理年份和季度的提取。...考察字段别名的应用,把复杂的计算字段用as改成别名,缩短SQL 语句,让查询语句比较简洁 4.考察日期和时间处理函数的用法,常用的日期和时间函数如下: 日期时间段除了用以上提取函数外,还可以用between
2、计算RFM的值(MySQL) 其实RFM的值,我们这里利用一个SQL语句就可以解决,但是我们为了更细致的讲解RFM值的计算过程,这里分开进行 一一叙述。...3、Tableau中进行RFM值的计算 ① 连接MySQL数据库 ? ② 新建“自定义SQL”,获取我们用于分析的数据源 ? ③ 在工作表中,完成如下一系列操作 ?...④ 创建“计算字段”,计算R_SCORE 注意:我们这里采用5级打分规则(业内一般都是这样打分的),但是分段标准是根据实际业务为驱动,进行讨论后得出。 ? ...同理,我们可以计算出“F_SCORE”和“M_SCORE”,操作如上,这里就不详细进行说明。F_SCORE的计算如下: ? M_SCORE的计算如下: ?...② 创建“计算字段”,进行RFM值高低的判断 分别将“R_SCORE”、“F_SCORE”、“M_SCORE”和“R平均值”、“F平均值”、“M平均值”进行一一比较,大于平均值就是1,否则为0。
UnitsSold 表的每一行表示的是每种产品的出售日期,单位和产品 id。 编写SQL查询以查找每种产品的平均售价。 average_price 应该四舍五入到小数点后两位。...这张表的每一行代表着 user1_id 和 user2_id 之间存在着朋友关系。...一场比赛是在女队和男队之间举行的 该表的每一行表示一个名叫 (player_name) 性别为 (gender) 的参赛者在某一天获得了 (score_points) 的分数 如果参赛者是女性,那么...此表的每一行包含了某在线商店顾客的姓名和电子邮件。...这张表的每一行分别代表了某公司其中一位员工的名字和 ID 。
全国共有20000多家零售店,该公司线下做的很不错,但是线上做的不好,线上的收入也就10%,主要是和京东、淘宝等之间的合作,公司希望在线上能够得到发展。...接下来,根据每个用户RFM的⬆和⬇情况,判断各自的客户级别。...下面我门只截图展示表中的部分数据。 2)计算RFM的值(MySQL) 其实RFM的值,我们这里利用一个SQL语句就可以解决,但是我们为了更细致的讲解RFM值的计算过程,这里分开进行 一一叙述。...RFM值的计算 ① 连接MySQL数据库 ② 新建“自定义SQL”,获取我们用于分析的数据源 ③ 在工作表中,完成如下一系列操作 ④ 创建“计算字段”,计算R_SCORE 注意:我们这里采用5级打分规则...”,进行RFM值高低的判断 分别将“R_SCORE”、“F_SCORE”、“M_SCORE”和“R平均值”、“F平均值”、“M平均值”进行一一比较,大于平均值就是1,否则为0。
【面试题】某公司数据库里有3张表,销售订单表、产品明细表、销售网点表 ”销售订单表”记录了销售情况,每一张数据表示哪位顾客、在哪一天、哪个网点购买了什么产品,购买的数量是多少,以及对应产品的零售价 “...产品明细表”记录了公司产品的详细信息 “销售网点表”记录了公司的销售网点 销售订单表、产品明细表、销售网点表字段之间的关系如下 销售订单表和产品明细表通过“产品”字段关联,销售订单表和销售网点通过...“交易网点”关联 【问题】查找既购买过ProductA又购买过ProductB,但没有购买ProductC的用户人数,并计算平均客单价 【解题思路】 需要把满足三个条件的用户查找出来: 1)买过ProductA...select 顾客ID from 销售订单表 where 产品 ='ProductC'); 我们把上一步的查询结果记录为临时表a。...然后,再用聚合函数计算顾客人数,平均客单价 select count(distinct(a.顾客ID))as 顾客人数, sum(a.销售数量*a.零售价)/count(distinct
大家可以点击链接查看 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 今天我们讲一些在做报表和复杂计算时非常实用的分析函数。...共 8 个订单,分为 A,B,C,D四种类型,后面两列是订单描述和订单数量。 假如我们现在想找到每个订单类型中数量最少的一行记录,比如想找到 A 类型订单数量最少的,B 类型订单数量最少的。。。...解释一下:倒数第二列我们修改窗口起点2,表示当前行与前两行之间的范围。可以看到每一行的值都是当前行与它前面两行的值的累加。而最后一列,是当前行与它之前3行的值的累加。...同理,SUM 也可以改为 AVG 求窗口的平均值 FIRST_VALUE() 和 LAST_VALUE()可以获取窗口的第一行和最后一行,NTH_VALUE()可以获取第 N 行。...我们根据订单类型分组后,分别算出每种订单类型数量的 1/2 中位数和 3/4中位数。
3、RT(Response Time)响应时间。本次比较中RT包括平均响应时间和第95百分位的响应时间。...仓库数量:10, 数据量size:4-5G 终端数量:100 运行时间:60分钟 性能指标: 1、tpmC(Transactions Per Minute)TPC-C规范下的每分钟新订单数 2、tpmTOTAL...通过测试结果,从tmpC(每分钟执行新订单数事务数)的值来看,AWS中国和阿里云在第一梯队,Azure相对落后。 3云数据库价格对比 MySQL: ?...4云数据库性价比 到底每一元钱能买多少性能,每个厂商的性能比到底如何,我们可以根据一个计算公式:性价比=性能相对值/价格相对值得出来。...2、AWS购买的预留实例多可用区的db.m3.large(定价日2015-11-24日),Azure购买的标准服务层的S3费用(定价日2015-11-24日) 计算结果如下: ? 柱状图: ?
这对于了解数据的整体特征以及各个分组之间的差异非常有用。 数据分类: 当需要按照某个列对数据进行分类时,分组查询是很有帮助的。例如,你可以按照地区、部门、时间等将数据进行分组,以便更好地理解和分析。...你想要按照订单日期和客户ID对订单进行分组,并计算每个组的订单总额。...SUM 计算了每个产品的总销售数量,而 AVG 计算了每个产品的平均销售数量。通过 GROUP BY,查询结果中的每一行表示一个产品ID,以及与之相关的总销售数量和平均销售数量。...以下是一个示例,演示如何使用 GROUPING SETS 进行多组分组: 假设有一个销售订单表(sales_orders),包含了订单的信息,如订单日期(order_date)、产品ID(product_id...七、 最佳实践和注意事项 在进行分组查询时,有一些最佳实践和注意事项可以帮助你编写更有效和可维护的 SQL 查询: 选择适当的聚合函数: 根据你的需求选择正确的聚合函数,如 COUNT、SUM、AVG、
01 数据概览 我们的源数据是订单表,记录着用户交易相关的字段: ? 有个细节需要注意,订单每一行代表着单个用户的单次购买行为,什么意思呢?...如果一个用户在一天内购买了4次,订单表对应记录着4行,而在实际的业务场景中,一个用户在一天内的多次消费行为,应该从整体上看作一次。...接着再观察数据的类型和缺失情况: ? 订单一共28833行,没有任何缺失值,Nice!类型方面,付款日期是时间格式,实付金额、邮费和购买数量是数值型,其他均为字符串类型。...下面我们有请潘大师(Pandas)登场,且看他如何三拳两脚就搞定这麻烦的分组逻辑,先拿R值打个样: ? 沧海横流,方显潘大师本色,短短一行代码就搞定了5个层级的打分。...频次深耕客户金额占比紧随其后,这部分客户的特征是近期有消费、消费频次低、消费金额高,和高消费唤回客户仅有购买时间上的不同,如何避免这部分客户向高消费唤回客户的流转是我们要思考的主要命题。
01 数据概览 我们的源数据是订单表,记录着用户交易相关的字段: 有个细节需要注意,订单每一行代表着单个用户的单次购买行为,什么意思呢?...如果一个用户在一天内购买了4次,订单表对应记录着4行,而在实际的业务场景中,一个用户在一天内的多次消费行为,应该从整体上看作一次。...接着再观察数据的类型和缺失情况: 订单一共28833行,没有任何缺失值,Nice!类型方面,付款日期是时间格式,实付金额、邮费和购买数量是数值型,其他均为字符串类型。...下面我们有请潘大师(Pandas)登场,且看他如何三拳两脚就搞定这麻烦的分组逻辑,先拿R值打个样: 沧海横流,方显潘大师本色,短短一行代码就搞定了5个层级的打分。...频次深耕客户金额占比紧随其后,这部分客户的特征是近期有消费、消费频次低、消费金额高,和高消费唤回客户仅有购买时间上的不同,如何避免这部分客户向高消费唤回客户的流转是我们要思考的主要命题。
---- OLTP数据库和数据仓库之间的差异 由于SQL通常适合分析查询,有许多图形化数据分析工具,它们可以生成SQL查询,可视化结果并支持分析师探索数据,例如通过向下钻取,切片和切丁等操作,所以数据库仓库最常见的模型是关系型...切丁(Dice)是指根据多个维度对数据进行切割,以更全面地了解数据的分布情况。 例如,在一个销售数据报表中,我们可以根据不同的地区和时间对数据进行切丁,以了解不同地区和时间段的销售情况。...虽然,数据仓库和关系型LOTP数据库看起来相似,因为它们都具有SQL查询接口,但在内部存储和查询引擎实现上,确是完全不同的。...这里以零售数据仓库为例: 模式的中心是一个所谓的事实表,在本例中为fact_sales表,事实表的每一行表示在特定时间发生的事件,这里每一行代表客户购买的一个商品。...日期和时间通常使用维度来表示,这样可以对日期(如公共假期)的相关信息进行编码,从而查询可以对比假期和非假期日之间的销售情况。
物化视图和虚拟视图一样,都是定义在实体表上的一条SQL查询,不同之处在于物化视图会实际执行SQL查询并且缓存查询的结果,因此当我们访问物化视图时,并不需要基于原始表再进行计算,而只需要直接获取缓存的物化视图结果就可以了...注意,虽然在图8-5中将输入流和动态输入表分为了两个部分,但实际上两者之间是互相映射的关系。 执行连续查询:在动态输入表上按照SQL的查询逻辑执行连续查询,然后产出动态输出表。...当第一条数据到来,这时没有中间结果,所以会将结果插入(INSERT)到动态输出表中,而如果同一个商品ID的下一条商品销售订单数据到来的时候,就会计算得到新的商品累计销售额结果,这时就要用新结果把上一次产出的中间结果...如果SQL查询是一个更新查询,那么这个SQL查询写入的动态输出表有可能是一个只有一行数据,而这一行数据在不断进行更新的表。...第四行和第五行数据的执行流程类似,不再赘述。 注意,如果下游还有一个作业或者算子去消费Upsert流的话,消费算子需要知道这条数据流的唯一键,以便正确地根据唯一键去处理插入或更新消息以及删除消息。
产品明细表”记录了公司产品的详细信息 “销售网点表”记录了公司的销售网点 销售订单表、产品明细表、销售网点表字段之间的关系如下 销售订单表和产品明细表通过“产品”字段关联,销售订单表和销售网点通过...3)第三步分组列出购买城市、姓名、购买金额 1.每个城市每个用户总的购买金额 需要“销售网点表”、”销售订单表”进行多表联结 select c.城市, a.顾客ID, sum(...2.找出购买金额第二的用户 把上一步的查询结果记录为临时表t1。...这个是典型的排名问题,要想到《猴子 从零学会SQL》里讲过的用窗口函数来实现 因有可能销售金额的是一样的,避免漏下,因此用窗口函数dense_rank对购买金额进行排序 select t1.城市...,对于下一行不同的数据将返回行号:1,1,3,4... dense_rank(): 返回结果为连续排名,排名值没有间断:1,1,2,3,4...
领取专属 10元无门槛券
手把手带您无忧上云