14. Mysql 开窗函数,一文带你直接通关

文章目录

    • 学前复习
    • 开窗函数
    • 窗口函数及应用
      • 排名函数
      • 错行函数
      • 取值函数
      • 分箱函数
      • 聚合函数
    • 总结

学前复习

在学习开窗函数前可以先复习下之前的内容:Mysql 常用函数和基础查询,还有遗漏的一些函数如下:

转换函数:CAST(expression AS data_type)

用于将某种数据类型的表达式显式转换为另一种数据类型,CAST()函数的参数是一个表达式,它包括用 AS关键字分隔的源值和目标数据类型

  • expression:任何有效的表达式。
  • AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
  • data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类 型。

可以转换的类型:

  • 二进制,同带binary前缀的效果 : BINARY
  • 字符型,可带参数 : CHAR()
  • 日期 : DATE
  • 时间: TIME
  • 日期时间型 : DATETIME
  • 浮点数 : DECIMAL
  • 整数 : SIGNED
  • 无符号整数 : UNSIGNED

示例

select cast('9.0' AS decimal); 
+------------------------+
| cast('9.0' AS decimal) |
+------------------------+
|                      9 |
+------------------------+

逻辑函数:

  • IFNULL(expression, alt_value)

判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个 参数的值。

  • IF(expr1,expr2,expr3)

如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。

  • CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4…ELSE expr] END

如果expr1的值为true,则返回expr2的值,如果expr3的值为false,则返回expr4的值…

开窗函数

开窗函数是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口;有的函数则相反,不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。开窗函数的本质还是聚合运算,只不过它更具灵活性,它对数据的每一行,都使用与该行相关的行进行计算并返回计算结果。

语法

开窗函数名([<字段名>]) over([partition by <分组字段>] [order by <排序字段> [desc]] [< 窗口分区>])

开窗函数的一个概念是当前行,当前行属于某个窗口,窗口由over关键字用来指定函数执行的窗口范围,如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,开窗函数基于所有行进 行计算;如果不为空,则有三个参数来设置窗口:

  • partition by <分组字段>:窗口按照哪些字段进行分组,开窗函数在不同的分组上分别执行。
  • order by <排序字段>:按照哪些字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和 partition by <分组字段>配合使用,也可以单独使用。
  • < 窗口分区>:它是排序之后的功能扩展,标识在排序之后的一个范围
rows|range between start_expr and end_expr

其中rowsrange为二选其一:

  1. rows是物理范围,即根据order by子句排序后,取的前N行及后N行的数据计算(与当前行的值无关,只与排序后的行号相关);
  2. range是逻辑范围,根据order by子句排序后,指定当前行对应值的范围取值,行数不固定,只要行值在范围内,对应行都包含在内。
  3. between start_expr and end_expr来指定范围的起始点和终结点,start_expr为起始点,end_expr为终结点。

start_expr为起始点,end_expr为终结点,有下面几种选项:

  • current row:以当前行为起点。
  • unbounded preceding:指明窗口开始于分组的第一行,以排序之后的第一行为起点。
  • unbounded following:以排序之后的最后一行为终点。
  • n preceding:以当前行的前面第n行为起点。
  • n following:以当前行的后面第n行为起点。

比如,如下几个示例

rows between 1 preceding and 1 following 窗口范围是当前行、前一行、后一行一共三行记录。 
rows unbounded preceding 窗口范围是分区中的第一行到当前行。
rows between unbounded preceding and unbounded following 窗口范围是当前分区中所有行, 等同于不写。

开窗函数和普通聚合函数的区别:

  • 聚合函数是将多条记录聚合为一条;而开窗函数是每条记录都会执行,有几条记录执行完还是几
    条。
  • 聚合函数也可以用于开窗函数中

窗口函数及应用

不是所有的函数都支持开窗函数,目前支持的窗口函数有:

排名函数:row_number()rank()dense_rank()

聚合函数:sum()avg()count()max()min()

错行函数:lead()lag()

取值函数:first_value()last_value

分箱函数:ntile()

数据准备1

create table test(id int,name varchar(10),sale int);
insert into test values(1,'aaa',100);
insert into test values(1,'bbb',200);
insert into test values(1,'ccc',200);
insert into test values(1,'ddd',300);
insert into test values(2,'eee',400);
insert into test values(2,'fff',200);

数据准备2

create table test2( id int,val int);
insert into test2
values (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),(2, 6),(2, 7),(2, 8),(2, 9),(1, 3),(1, 5);

排名函数

  • row_number():未指定分组partition by子句,则全部数据视为一个分组进行排序,在分组内部进行排序,组内的排序是连续且唯一的。
  • rank():未指定分组partition by子句,则全部数据视为一个分组进行排序,在分组内部进行跳跃排序,有相同的排名时,有相同序号,排序序号不连续。
  • dense_rank():未指定分组partition by子句,则全部数据视为一个分组进行排序,在分组内部进行连续排序,有相同排名时,有相同序号,但是排序序号连续。

应用示例

select t.id, t.name, t.sale, row_number() over (order by sale)                 as row_number1 -- 只有排序,没有分组,则全部数据视为一个分组进行排序, row_number() over (partition by id order by sale) as row_number2 -- 指定分组排序, rank() over (order by sale)                       as rank1, rank() over (partition by id order by sale)       as rank2, dense_rank() over (order by sale)                 as dense_rank1, dense_rank() over (partition by id order by sale) as dense_rank2
from test as t;
+------+------+------+-------------+-------------+-------+-------+-------------+-------------+
| id   | name | sale | row_number1 | row_number2 | rank1 | rank2 | dense_rank1 | dense_rank2 |
+------+------+------+-------------+-------------+-------+-------+-------------+-------------+
|    1 | aaa  |  100 |           1 |           1 |     1 |     1 |           1 |           1 |
|    1 | bbb  |  200 |           2 |           2 |     2 |     2 |           2 |           2 |
|    1 | ccc  |  200 |           3 |           3 |     2 |     2 |           2 |           2 |
|    1 | ddd  |  300 |           5 |           4 |     5 |     4 |           3 |           3 |
|    2 | fff  |  200 |           4 |           1 |     2 |     1 |           2 |           1 |
|    2 | eee  |  400 |           6 |           2 |     6 |     2 |           4 |           2 |
+------+------+------+-------------+-------------+-------+-------+-------------+-------------+

rank1列中 sale=200 有三个值,分组排序后都一样,但后面的排序序号不连续,直接跳到了5,rank2同理理解。

dense_rank1列中 sale=200 有三个值,分组排序后都一样,但后面的排序序号是连续的,dense_rank2同理理解。

想要深度了解排名,可以参考:Mysql 常见排名实现。

错行函数

lead():向下取值,如果向下取值没有数据的时候显示为NULL。
lag():向上取值,如果向上取值没有数据的时候显示为NULL。

lead(expr,<offset>,<default>) over(partition by col1 order by col2)
lag(expr,<offset>,<default>) over(partition by col1 order by col2)

其中:

  • expr通常是直接是列名,也可以是从其他行返回的表达式;
  • offset是默认为1,表示在当前分区内基于当前行的偏移行数;
  • default是在offset指定的偏移行数超出了分组的范围时(因为默认会返回null),可以通过设置这个字段来返回一个默认值来替代null。

应用示例

select t.id, t.name, t.sale, lead(sale) over (order by sale)                 as lead1 -- 只有排序,没有分组,则全部数据视为一个分组进行排序, lead(sale) over (partition by id order by sale) as lead2 -- 指定分组排序, lead(sale, 2, 'empty') over (order by sale)     as lead3 -- 分组排序,向下偏移2,没有数据显示 empty, lag(sale) over (order by sale)                  as lag1, lag(sale) over (partition by id order by sale)  as lag2, lag(sale, 2, 'empty') over (order by sale)      as lag3
from test as t;
+------+------+------+-------+-------+-------+------+------+-------+
| id   | name | sale | lead1 | lead2 | lead3 | lag1 | lag2 | lag3  |
+------+------+------+-------+-------+-------+------+------+-------+
|    1 | aaa  |  100 |   200 |   200 | 200   | NULL | NULL | empty |
|    1 | bbb  |  200 |   200 |   200 | 200   |  100 |  100 | empty |
|    1 | ccc  |  200 |   200 |   300 | 300   |  200 |  200 | 100   |
|    1 | ddd  |  300 |   400 |  NULL | empty |  200 |  200 | 200   |
|    2 | fff  |  200 |   300 |   400 | 400   |  200 | NULL | 200   |
|    2 | eee  |  400 |  NULL |  NULL | empty |  300 |  200 | 200   |
+------+------+------+-------+-------+-------+------+------+-------+

lead函数与lag函数是两个偏移量函数,主要用于查找当前行字段的上一个值或者下一个值,可以设定偏移量和没有数据返回的默认值。

取值函数

first_value(expr) over(partition by col1 order by col2)
last_value(expr) over(partition by col1 order by col2)

其中expr通常是直接是列名,也可以是从其他行返回的表达式,根据字段col1进行分组,在分组内部根据字段col2进行排序,first_value函数返回一组排序值后的第一个值,last_value返回一组排序值后的最后一个值。

应用示例

select t.id, t.name, t.sale, first_value(sale) over ()                              as first_value1 -- 没有分组和排序, first_value(sale) over (order by sale)                 as first_value2 -- 没有分组只有排序, first_value(sale) over (partition by id order by sale) as first_value3 -- 分组排序,第一个值, last_value(sale) over ()                               as last_value1, last_value(sale) over (order by sale)                  as last_value2, last_value(sale) over (partition by id order by sale)  as last_value3
from test as t;
+------+------+------+--------------+--------------+--------------+-------------+-------------+-------------+
| id   | name | sale | first_value1 | first_value2 | first_value3 | last_value1 | last_value2 | last_value3 |
+------+------+------+--------------+--------------+--------------+-------------+-------------+-------------+
|    1 | aaa  |  100 |          100 |          100 |          100 |         400 |         100 |         100 |
|    1 | bbb  |  200 |          100 |          100 |          100 |         400 |         200 |         200 |
|    1 | ccc  |  200 |          100 |          100 |          100 |         400 |         200 |         200 |
|    1 | ddd  |  300 |          100 |          100 |          100 |         400 |         300 |         300 |
|    2 | fff  |  200 |          100 |          100 |          200 |         400 |         200 |         200 |
|    2 | eee  |  400 |          100 |          100 |          200 |         400 |         400 |         400 |
+------+------+------+--------------+--------------+--------------+-------------+-------------+-------------+

分箱函数

ntile(ntile_num) over(partition by col1 order by col2)

ntile_num是一个整数,用于创建“桶”的数量,即分组的数量,不能小于等于0。其次需要注意的是,在over函数内,尽量要有排序order by 子句。

应用示例

select t.id, t.name, t.sale, ntile(4) over (order by sale)                 as ntile1, ntile(4) over (partition by id order by sale) as ntile2
from test as t;
+------+------+------+--------+--------+
| id   | name | sale | ntile1 | ntile2 |
+------+------+------+--------+--------+
|    1 | aaa  |  100 |      1 |      1 |
|    1 | bbb  |  200 |      1 |      2 |
|    1 | ccc  |  200 |      2 |      3 |
|    1 | ddd  |  300 |      3 |      4 |
|    2 | fff  |  200 |      2 |      1 |
|    2 | eee  |  400 |      4 |      2 |
+------+------+------+--------+--------+

聚合函数

  • sum(expr):只有分组,没有排序,显示分组的汇总值;如果既有分组也有排序,那么排序之后的开窗函数是默认排序之后第一行数据到当前行(逻辑层面)的汇总值。
  • avg(expr):只有分组,没有排序,显示分组的平均值;如果既有分组也有排序,那么排序之后的开窗函数是默认排序之后第一行数据到当前行(逻辑层面)的平均值。
  • count(expr):只有分组,没有排序,显示分组的计数;如果既有分组也有排序,那么排序之后的开窗函数是默认排序之后第一行数据到当前行(逻辑层面)的计数。
  • max(expr):只有分组,没有排序,显示分组的最大值;如果既有分组也有排序,那么排序之后的开窗函数是默认排序之后第一行数据到当前行(逻辑层面)的最大值。
  • min():只有分组,没有排序,显示分组的最小值;如果既有分组也有排序,那么排序之后的开窗函数是默认排序之后第一行数据到当前行(逻辑层面)的最小值。

应用示例

不使用< 窗口分区>下的应用:

select id, val, max(val) over ()                               as max1 -- 没有分组和排序, max(val) over (partition by id)                as max2 -- 有分组没有排序, max(val) over (partition by id order by val)   as max3 -- 既有分组,也有排序, min(val) over ()                               as min1, min(val) over (partition by id)                as min2, min(val) over (partition by id order by val)   as min3, sum(val) over ()                               as sum1, sum(val) over (partition by id)                as sum2, sum(val) over (partition by id order by val)   as sum3, avg(val) over ()                               as avg1, avg(val) over (partition by id)                as avg2, avg(val) over (partition by id order by val)   as avg3, count(val) over ()                             as count1, count(val) over (partition by id)              as count2, count(val) over (partition by id order by val) as count3
from test2;
+------+------+------+------+------+------+------+------+------+------+------+--------+--------+--------+--------+--------+--------+
| id   | val  | max1 | max2 | max3 | min1 | min2 | min3 | sum1 | sum2 | sum3 | avg1   | avg2   | avg3   | count1 | count2 | count3 |
+------+------+------+------+------+------+------+------+------+------+------+--------+--------+--------+--------+--------+--------+
|    1 |    1 |    9 |    5 |    1 |    1 |    1 |    1 |   53 |   23 |    1 | 4.8182 | 3.2857 | 1.0000 |     11 |      7 |      1 |
|    1 |    2 |    9 |    5 |    2 |    1 |    1 |    1 |   53 |   23 |    3 | 4.8182 | 3.2857 | 1.5000 |     11 |      7 |      2 |
|    1 |    3 |    9 |    5 |    3 |    1 |    1 |    1 |   53 |   23 |    9 | 4.8182 | 3.2857 | 2.2500 |     11 |      7 |      4 |
|    1 |    3 |    9 |    5 |    3 |    1 |    1 |    1 |   53 |   23 |    9 | 4.8182 | 3.2857 | 2.2500 |     11 |      7 |      4 |
|    1 |    4 |    9 |    5 |    4 |    1 |    1 |    1 |   53 |   23 |   13 | 4.8182 | 3.2857 | 2.6000 |     11 |      7 |      5 |
|    1 |    5 |    9 |    5 |    5 |    1 |    1 |    1 |   53 |   23 |   23 | 4.8182 | 3.2857 | 3.2857 |     11 |      7 |      7 |
|    1 |    5 |    9 |    5 |    5 |    1 |    1 |    1 |   53 |   23 |   23 | 4.8182 | 3.2857 | 3.2857 |     11 |      7 |      7 |
|    2 |    6 |    9 |    9 |    6 |    1 |    6 |    6 |   53 |   30 |    6 | 4.8182 | 7.5000 | 6.0000 |     11 |      4 |      1 |
|    2 |    7 |    9 |    9 |    7 |    1 |    6 |    6 |   53 |   30 |   13 | 4.8182 | 7.5000 | 6.5000 |     11 |      4 |      2 |
|    2 |    8 |    9 |    9 |    8 |    1 |    6 |    6 |   53 |   30 |   21 | 4.8182 | 7.5000 | 7.0000 |     11 |      4 |      3 |
|    2 |    9 |    9 |    9 |    9 |    1 |    6 |    6 |   53 |   30 |   30 | 4.8182 | 7.5000 | 7.5000 |     11 |      4 |      4 |
+------+------+------+------+------+------+------+------+------+------+------+--------+--------+--------+--------+--------+--------+

max1 在没有分组和排序情况下,取全部数据的最大值;

max2 在有分组没有排序情况下,取分组区间内数据的最大值;

max3 在既有分组,也有排序,则去分组排序过程中的最大值,即分组排序当前行与首行内数据的最大值;

剩下的开窗聚合结果与max逻辑类似。

使用< 窗口分区>的应用:

rows|range between start_expr and end_expr

通过以下示例进一步理解

select id, val, sum(val) over (partition by id order by val)                                                    as sum1-- 不指定窗口分区,相当于默认的规则,即range between unbounded preceding and current row, sum(val) over (partition by id order by val rows between unbounded preceding and current row)   as sum2 -- 指定窗口分区为rows物理行范围的第一行到当前行, sum(val) over (partition by id order by val range between unbounded preceding and current row)  as sum3 -- 指定窗口分区为range范围的第一个数值到当前行对应的数值, sum(val) over (partition by id order by val rows between 1 preceding and 1 following)           as sum4 -- 指定窗口分区为rows物理行的前一行到当前行的后一行, sum(val) over (partition by id order by val range between 1 preceding and 1 following)          as sum5 -- 指定窗口分区为range范围的上一个数值到当前行对应的数值的下一个数值
from test2;

Windows可以被定义和命名,也可以写成以下方式,使其整体看起来更加简洁。

select id, val, sum(val) over w1 as sum1-- 不指定窗口分区,相当于默认的规则,即range between unbounded preceding and current row, sum(val) over w2 as sum2 -- 指定窗口分区为rows物理行范围的第一行到当前行, sum(val) over w3 as sum3 -- 指定窗口分区为range范围的第一个数值到当前行对应的数值, sum(val) over w4 as sum4 -- 指定窗口分区为rows物理行的前一行到当前行的后一行, sum(val) over w5 as sum5 -- 指定窗口分区为range范围的上一个数值到当前行对应的数值的下一个数值
from test2window w1 as (partition by id order by val),w2 as (partition by id order by val rows between unbounded preceding and current row),w3 as (partition by id order by val range between unbounded preceding and current row),w4 as (partition by id order by val rows between 1 preceding and 1 following),w5 as (partition by id order by val range between 1 preceding and 1 following);
+------+------+------+------+------+------+------+
| id   | val  | sum1 | sum2 | sum3 | sum4 | sum5 |
+------+------+------+------+------+------+------+
|    1 |    1 |    1 |    1 |    1 |    3 |    3 |
|    1 |    2 |    3 |    3 |    3 |    6 |    9 |
|    1 |    3 |    9 |    6 |    9 |    8 |   12 |
|    1 |    3 |    9 |    9 |    9 |   10 |   12 |
|    1 |    4 |   13 |   13 |   13 |   12 |   20 |
|    1 |    5 |   23 |   18 |   23 |   14 |   14 |
|    1 |    5 |   23 |   23 |   23 |   10 |   14 |
|    2 |    6 |    6 |    6 |    6 |   13 |   13 |
|    2 |    7 |   13 |   13 |   13 |   21 |   21 |
|    2 |    8 |   21 |   21 |   21 |   24 |   24 |
|    2 |    9 |   30 |   30 |   30 |   17 |   17 |
+------+------+------+------+------+------+------+
  • rows是物理范围,只和排序之后的行号有关,和当前行的数值无关。
  • range是逻辑层面的范围,逻辑范围意思是排序之后把具有相同的值看成同一行。

弄懂以上两点,并且结合示例得到结果分析你就能清楚明白了。

总结

开窗函数是MySQL中强大的查询工具,能对数据进行更灵活的处理和分析,其中排名函数使用应用广泛,面试中也常常考察,建议大家多去自己实际操作一遍,并且结合数据查询结果了解开窗函数的使用,我相信你一定会豁然开朗,希望本文能给你带来帮助,喜欢的话就一键三连哦!!!

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

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

相关文章

Node.js黑马时钟案例

先上没有使用node.js之前的html部分代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}html,body {height: 100%;overflow: hidden;backgrou…

Zabbix+Grafana

背景 对指标采集 将采集的信息存储 可视化 报警 因为节点上本身就是zabbix&#xff0c;但对应的server在数据中心&#xff0c;不知道一个agent可否服务于多个server端&#xff0c;而且不确定数据中心是否会提供用户。所以还是放弃zabbix 架构

如何使用CFImagehost结合内网穿透搭建简洁易用的私人图床并远程访问

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

OBS如何安装NDI 插件

能检索到这个文章的人&#xff0c;想必是知道什么是OBS和NDI&#xff0c;也知道他们的用途的。所以&#xff0c;不作赘述。4 安装NDI插件 1 直接访问https://github.com/obs-ndi/obs-ndi&#xff0c;打不开的同志你们自己想办法。 2 有两个东西要下载&#xff0c;如下图所示&a…

Python中栈的概念和使用

目录 一、引言 二、栈的概念 三、栈的使用 1、创建栈 2、入栈操作 3、出栈操作 4、查看栈顶元素 5、判断栈是否为空 四、应用场景 1、函数调用 2、表达式求值 3、深度优先搜索 4、括号匹配 五、总结 一、引言 栈是一种重要的数据结构&#xff0c;它遵循后进先出…

Axure元件基本介绍进阶

Axure元件基本介绍进阶 1.Axure元件基本介绍1.在 Axure 中&#xff0c;元件是构建原型的基本构成单元&#xff0c;能够帮助设计师快速创建、重复使用和管理设计元素。以下是 Axure 中元件的基本介绍&#xff1a;1.基本元件&#xff1a; 2.基本元件的使用一.【举例说明】积木&am…

TopK问题——用堆来解决

目录 一、什么是TopK问题&#xff1f; 二、解决方法 1.排序 2.局部排序&#xff08;冒泡排序&#xff09; 3.堆 一、什么是TopK问题&#xff1f; TopK问题就是从n个数据中找到最大的k个数&#xff08;n远大于k&#xff09; 二、解决方法 1.排序 将所有数据降序排序&am…

Qt提升绘制效率,绘制加速。

在我们绘制一些复杂逻辑且数据量巨大的图形时&#xff0c;经常会出现流畅性问题&#xff0c;本文就是来进行讲解如何提升绘制效率的。 实现思路&#xff1a; 场景1&#xff1a;我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

如何更新索引

1.如何更新索引 在数据库中&#xff0c;更新索引通常是指对现有索引进行修改或重建&#xff0c;以改善查询性能或适应新的数据需求。不同的数据库管理系统可能有不同的语法和方法来更新索引&#xff0c;以下是一些常见数据库系统的更新索引方法的示例&#xff1a; MySQL / Ma…

圣诞节酷炫特效合集【含十几个HTML+CSS前端特效+34个桌面酷炫圣诞程序】

写在前面 ❤️源码获取:订阅后见文末 ❤️内容介绍:包含HTML+CSS等十几个圣诞特效;以及三十四个桌面酷炫圣诞树合集 ❤️订阅后所得如下: ❤️HTML圣诞+桌面圣诞程序效果如下: 下方展示代码仅举例其中几个 所有效果源码及文件订阅后找博主获取即可 🎄css3圣诞雪人动…

基于python的大数据分析与应用环境的搭建

一、主要目的&#xff1a; 初步熟悉Python数据分析工具&#xff0c;通过查阅相关说明文档掌握Numpy、Scipy和Pandas包的基本使用方法。对于不同形式的源数据文件&#xff0c;能够基于python开发环境正确的完成数据导入。 二、主要内容&#xff1a; 1、Python开发环境安装以及…

阿里云国际跨境直播解决方案,视频AI创新营销模式丰富直播场景

据第三方咨询公司iiMedia Research预测&#xff0c;2017-2020年&#xff0c;视频直播行业一直处于高速发展阶段。2020年&#xff0c;视频直播行业市场收入超1万亿元&#xff0c;累计覆盖用户5.26亿。 视频直播的应用范围已从视频娱乐、电子商务等泛互联网行业扩展到在线教育、…

分布式数据库 GaiaDB-X 金融应用实践

1 银行新一代核心系统建设背景及架构 在银行的 IT 建设历程中&#xff0c;尤其是中大行&#xff0c;大多都基于大型机和小型机来构建核心系统。随着银行业务的快速发展&#xff0c;这样的系统对业务的支持越来越举步维艰&#xff0c;主要体现在以下四个方面&#xff1a; 首先…

[C++] 继承

文章目录 1、继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 2、基类和派生类对象赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元6、继承与静态成员7、菱形继承&#xff0c;菱形虚拟…

centOS 64位安装node_exporter

下载node_exporter 我是在这里https://prometheus.io/download/#node_exporter下载到自己电脑&#xff0c;然后使用rz命令传到linux上的。 关于rz命令的使用可看我的这个文章linux上传下载文件lrzsz 解压 tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz将执行文件移动到b…

数据中心到底是如何工作的?

数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系到整个网络生态的运转。但这个复杂而庞大的数据枢纽背后隐藏着怎样的精密机制&#xff0c;是许多人颇感好奇的谜。 数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系…

Python爬虫实战 | 爬取拼多多商品的详情价格SKU数据

本案例将为大家演示如何爬取拼多多商品的详情数据。目的是爬取大量的商品以及商品的评论&#xff0c;所以在程序设计上要考虑到该爬虫的高并发以及持久化存储。爬虫工具选用了Scrapy框架&#xff0c;以满足爬虫的高并发请求任务&#xff1b;持久化存储用了MongoDB&#xff0c;对…

Epicypher—CUTANA™ ChIC/CUTRUN Kit

核酸酶靶向切割和释放 (CUT&RUN)技术是由Steven henikoff博士团队开发的一种染色质图谱分析方法&#xff0c;基于Ulrich Laemmli博士的染色质免疫切割技术 (ChIC)&#xff0c;融合蛋白A与微球菌核酸酶 (pA-MNase)&#xff0c;选择性原位切割与抗体结合的染色质。在CUT&…

Temporal 服务限制说明

本页详细介绍了编码到 Temporal 平台中的许多错误和警告&#xff08;错误是硬限制&#xff0c;一旦达到就会失败&#xff1b;源&#xff09; 1、标识符的最大长度限制 工作流 ID、工作流类型和任务队列名称等标识符的最大长度为 UTF-8 格式的 1,000 个字符。 2、gRPC 消息接收…