SQL開窗函數

文章目錄

  • 概念:
  • 語法:
  • 常用的窗口函數及示例:
    • 求平均值:AVG() :
    • 求和:SUM():
    • 求排名:
    • 移動平均
    • 計數COUNT():
    • 求最大MXA()/小MIN()值
    • 求分區內的最大/最小值
    • 求當前行的前/后一個值

概念:

開窗函數是對于每條記錄 都要在此窗口內執行函數,它對數據的每一行 ,都使用與該行相關的行進行計算并返回計算結果。開窗函數的本質還是聚合運算,只不過它更具靈活性。
開窗函數和普通聚合函數的區別:

  • 聚合函數是將多條記錄聚合為一條;而開窗函數是每條記錄都會執行,有幾條記錄執行完還是幾條。
  • 聚合函數也可以用于開窗函數中。

應用:
窗口函數提供了在查詢結果中進行排序、排名、聚合和分析的靈活性。窗口函數在數據分析和報表生成中非常有用,可以實現更復雜的計算和分析需求。

語法:

window_function() OVER (
[PARTITION BY partition_expression]
[ORDER BY order_list]
[frame_clause] )

開窗函數的一個概念是當前行,當前行屬于某個窗口,窗口由over關鍵字用來指定函數執行的窗口范圍,如果后面括號中什么都不寫,則意味著窗口包含滿足where條件的所行,開窗函數基于所有行進行計算;如果不為空,則有三個參數來設置窗口:

  • window_function(): 要使用的窗口函數,如:ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG(), SUM(), AVG() 等。
  • PARTITION BY: 可選項,用于將結果集劃分為分區,以便窗口函數在每個分區內計算。
  • ORDER BY: 可選項,用于指定結果集的排序順序,窗口函數將根據指定的排序順序進行計算。
  • frame_clause: 可選項,用于指定窗口中要考慮的行的范圍。常見的 frame 類型包括 ROWS, RANGE 等,通常用來作為滑動窗口使用。

對于滑動窗口的范圍指定,通常使用 between frame_start and frame_end 語法來表示行范圍,frame_start和frame_end可以支持如下關鍵字,來確定不同的動態行記錄:

current row 邊界是當前行,一般和其他范圍關鍵字一起使用
unbounded preceding 邊界是分區中的第一行
unbounded following 邊界是分區中的最后一行
expr preceding 邊界是當前行減去expr的值
expr following 邊界是當前行加上expr的值

示例:

rows between 1 preceding and 1 following 窗口范圍是當前行、前一行、后一行一共三行記錄。
rows unbounded preceding 窗口范圍是當前行到分區中的最后一行。
rows between unbounded preceding and unbounded following 窗口范圍是當前分區中所有行,等同于不寫。

在這里插入圖片描述

常用的窗口函數及示例:

以下是一些MySQL中常用的窗口函數:
示例數據: 銷售表包含以下列:銷售部門、銷售產品、銷售日期、銷售員、銷售數量、產品單價;(銷售額=銷售數量*產品單價)

CREATE TABLE sales (department VARCHAR(50),product VARCHAR(50),sale_date DATE,salesperson VARCHAR(50),quantity INT,unit_price DECIMAL(10,2)
);INSERT INTO sales (department, product, sale_date, salesperson, quantity, unit_price)
VALUES
('銷售1部','1001','2024/5/3','王明','15','200'),
('銷售2部','1002','2024/5/10','徐小小','20','500'),
('銷售3部','1002','2024/5/18','紀風','10','500'),
('銷售1部','1001','2024/5/5','王明','30','200'),
('銷售2部','1002','2024/5/12','徐小小','25','500'),
('銷售3部','1001','2024/5/20','紀風','18','200'),
('銷售1部','1001','2024/5/8','王明','12','200'),
('銷售2部','1002','2024/5/25','徐小小','22','500'),
('銷售2部','1003','2024/5/15','徐小小','8','1000'),
('銷售1部','1001','2024/5/30','王明','16','200'),
('銷售2部','1002','2024/5/1','徐小小','14','500'),
('銷售3部','1003','2024/5/22','紀風','19','1000'),
('銷售2部','1001','2024/5/7','徐小小','21','200'),
('銷售2部','1002','2024/5/28','劉陽','11','500'),
('銷售3部','1003','2024/5/17','紀風','24','1000'),
('銷售1部','1001','2024/5/4','王明','17','200'),
('銷售2部','1002','2024/5/13','劉陽','9','500'),
('銷售3部','1003','2024/5/21','紀風','23','1000'),
('銷售1部','1001','2024/5/29','張一','7','200'),
('銷售2部','1002','2024/5/6','劉陽','13','500'),
('銷售3部','1003','2024/5/23','付華','18','1000'),
('銷售1部','1001','2024/5/2','張一','20','200'),
('銷售2部','1002','2024/5/9','劉陽','10','500'),
('銷售3部','1003','2024/5/26','付華','30','1000'),
('銷售1部','1001','2024/5/14','張一','25','200'),
('銷售2部','1002','2024/5/31','劉陽','18','500'),
('銷售3部','1003','2024/5/24','付華','12','1000'),
('銷售1部','1001','2024/5/11','張一','22','200'),
('銷售2部','1002','2024/5/19','劉陽','8','500'),
('銷售3部','1003','2024/5/27','付華','16','1000'),
('銷售1部','1001','2024/5/16','張一','14','200'),
('銷售2部','1002','2024/5/3','劉陽','19','500'),
('銷售3部','1003','2024/5/20','付華','21','1000'),
('銷售1部','1001','2024/5/7','張一','11','200'),
('銷售2部','1002','2024/5/24','劉陽','24','500'),
('銷售3部','1003','2024/5/12','付華','17','1000'),
('銷售1部','1001','2024/5/29','張一','9','200'),
('銷售1部','1002','2024/5/5','張一','23','500'),
('銷售2部','1003','2024/5/22','劉陽','7','1000'),
('銷售3部','1001','2024/5/9','付華','13','200'),
('銷售1部','1002','2024/5/16','張一','18','500'),
('銷售2部','1003','2024/5/23','劉陽','20','1000'),
('銷售3部','1001','2024/5/1','付華','10','200'),
('銷售1部','1002','2024/5/18','張一','30','500'),
('銷售2部','1003','2024/5/25','劉陽','25','1000'),
('銷售3部','1001','2024/5/2','付華','18','200'),
('銷售1部','1002','2024/5/11','張一','10','500'),
('銷售2部','1003','2024/5/9','劉陽','50','1000'),
('銷售3部','1001','2024/5/10','付華','5','200');

求平均值:AVG() :

查詢各部門的平均銷售額(需保留全部行信息)

SELECT *,quantity*unit_price as sale,avg(quantity*unit_price) over(partition by department ) avg_sale  from sales;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  department	|	product	|	sale_date	|	salesperson	|	quantity	|	unit_price	|	sale	|	avg_sale	|
|  銷售1|	1001	|	2024/5/3	|	王明	|	15	|	200	|	3000	|	5006.25	|
|  銷售1|	1001	|	2024/5/7	|	張一	|	11	|	200	|	2200	|	5006.25	|
|  銷售1|	1001	|	2024/5/29	|	張一	|	9	|	200	|	1800	|	5006.25	|
|  銷售1|	1001	|	2024/5/5	|	王明	|	30	|	200	|	6000	|	5006.25	|
|  銷售1|	1001	|	2024/5/29	|	張一	|	7	|	200	|	1400	|	5006.25	|
|  銷售1|	1002	|	2024/5/5	|	張一	|	23	|	500	|	11500	|	5006.25	|
|  銷售1|	1001	|	2024/5/8	|	王明	|	12	|	200	|	2400	|	5006.25	|
|  銷售1|	1002	|	2024/5/16	|	張一	|	18	|	500	|	9000	|	5006.25	|
|  銷售1|	1001	|	2024/5/2	|	張一	|	20	|	200	|	4000	|	5006.25	|
|  銷售1|	1001	|	2024/5/30	|	王明	|	16	|	200	|	3200	|	5006.25	|
|  銷售1|	1002	|	2024/5/18	|	張一	|	30	|	500	|	15000	|	5006.25	|
|  銷售1|	1002	|	2024/5/11	|	張一	|	10	|	500	|	5000	|	5006.25	|
|  銷售1|	1001	|	2024/5/14	|	張一	|	25	|	200	|	5000	|	5006.25	|
|  銷售1|	1001	|	2024/5/11	|	張一	|	22	|	200	|	4400	|	5006.25	|
|  銷售1|	1001	|	2024/5/16	|	張一	|	14	|	200	|	2800	|	5006.25	|
|  銷售1|	1001	|	2024/5/4	|	王明	|	17	|	200	|	3400	|	5006.25	|
|  銷售2|	1002	|	2024/5/10	|	徐小小	|	20	|	500	|	10000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/6	|	劉陽	|	13	|	500	|	6500	|	11705.55556	|
|  銷售2|	1002	|	2024/5/12	|	徐小小	|	25	|	500	|	12500	|	11705.55556	|
|  銷售2|	1002	|	2024/5/13	|	劉陽	|	9	|	500	|	4500	|	11705.55556	|
|  銷售2|	1002	|	2024/5/25	|	徐小小	|	22	|	500	|	11000	|	11705.55556	|
|  銷售2|	1003	|	2024/5/15	|	徐小小	|	8	|	1000	|	8000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/1	|	徐小小	|	14	|	500	|	7000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/9	|	劉陽	|	10	|	500	|	5000	|	11705.55556	|
|  銷售2|	1001	|	2024/5/7	|	徐小小	|	21	|	200	|	4200	|	11705.55556	|
|  銷售2|	1002	|	2024/5/28	|	劉陽	|	11	|	500	|	5500	|	11705.55556	|
|  銷售2|	1002	|	2024/5/31	|	劉陽	|	18	|	500	|	9000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/24	|	劉陽	|	24	|	500	|	12000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/19	|	劉陽	|	8	|	500	|	4000	|	11705.55556	|
|  銷售2|	1003	|	2024/5/22	|	劉陽	|	7	|	1000	|	7000	|	11705.55556	|
|  銷售2|	1003	|	2024/5/23	|	劉陽	|	20	|	1000	|	20000	|	11705.55556	|
|  銷售2|	1002	|	2024/5/3	|	劉陽	|	19	|	500	|	9500	|	11705.55556	|
|  銷售2|	1003	|	2024/5/25	|	劉陽	|	25	|	1000	|	25000	|	11705.55556	|
|  銷售2|	1003	|	2024/5/9	|	劉陽	|	50	|	1000	|	50000	|	11705.55556	|
|  銷售3|	1001	|	2024/5/20	|	紀風	|	18	|	200	|	3600	|	13186.66667	|
|  銷售3|	1003	|	2024/5/12	|	付華	|	17	|	1000	|	17000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/22	|	紀風	|	19	|	1000	|	19000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/27	|	付華	|	16	|	1000	|	16000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/17	|	紀風	|	24	|	1000	|	24000	|	13186.66667	|
|  銷售3|	1001	|	2024/5/9	|	付華	|	13	|	200	|	2600	|	13186.66667	|
|  銷售3|	1003	|	2024/5/24	|	付華	|	12	|	1000	|	12000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/21	|	紀風	|	23	|	1000	|	23000	|	13186.66667	|
|  銷售3|	1001	|	2024/5/1	|	付華	|	10	|	200	|	2000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/23	|	付華	|	18	|	1000	|	18000	|	13186.66667	|
|  銷售3|	1003	|	2024/5/26	|	付華	|	30	|	1000	|	30000	|	13186.66667	|
|  銷售3|	1001	|	2024/5/2	|	付華	|	18	|	200	|	3600	|	13186.66667	|
|  銷售3|	1003	|	2024/5/20	|	付華	|	21	|	1000	|	21000	|	13186.66667	|
|  銷售3|	1002	|	2024/5/18	|	紀風	|	10	|	500	|	5000	|	13186.66667	|
|  銷售3|	1001	|	2024/5/10	|	付華	|	5	|	200	|	1000	|	13186.66667	|
+-------+--------+-----------+------+------------+------+------+--------+

求和:SUM():

查詢每個產品的銷售總額:

SELECT   product, SUM(quantity*unit_price) AS sale FROM sales GROUP BY product;
+-------+--------+-----------+------+------------+------+------+--------+
|  product  | sale  |
|  1001  | 	56600  |
|  1002  | 	142000  |
|  1003  | 	290000  |
+-------+--------+-----------+------+------------+------+------+--------+

求排名:

  • row_number(): 顯示分區中不重復不間斷的序號
  • dense_rank(): 顯示分區中重復不間斷的序號
  • rank() 顯示分區中重復間斷的序號

計算每個產品在每個日期的銷售量排名:

SELECT   product,quantity,unit_price,sale_date,RANK() OVER (PARTITION BY sale_date, product ORDER BY quantity DESC) AS sale_rank FROM sales ORDER BY sale_date, product, quantity DESC;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  product	|	quantity	|	unit_price	|	sale_date	|	sales_rank	|
|  1001	|	10	|	200	|	2024/5/1	|	1	|
|  1002	|	14	|	500	|	2024/5/1	|	1	|
|  1001	|	20	|	200	|	2024/5/2	|	1	|
|  1001	|	18	|	200	|	2024/5/2	|	2	|
|  1001	|	15	|	200	|	2024/5/3	|	1	|
|  1002	|	19	|	500	|	2024/5/3	|	1	|
|  1001	|	17	|	200	|	2024/5/4	|	1	|
|  1001	|	30	|	200	|	2024/5/5	|	1	|
|  1002	|	23	|	500	|	2024/5/5	|	1	|
|  1002	|	13	|	500	|	2024/5/6	|	1	|
|  1001	|	21	|	200	|	2024/5/7	|	1	|
|  1001	|	11	|	200	|	2024/5/7	|	2	|
|  1001	|	12	|	200	|	2024/5/8	|	1	|
|  1001	|	13	|	200	|	2024/5/9	|	1	|
|  1002	|	10	|	500	|	2024/5/9	|	1	|
|  1003	|	50	|	1000	|	2024/5/9	|	1	|
|  1001	|	5	|	200	|	2024/5/10	|	1	|
|  1002	|	20	|	500	|	2024/5/10	|	1	|
|  1001	|	22	|	200	|	2024/5/11	|	1	|
|  1002	|	10	|	500	|	2024/5/11	|	1	|
|  1002	|	25	|	500	|	2024/5/12	|	1	|
|  1003	|	17	|	1000	|	2024/5/12	|	1	|
|  1002	|	9	|	500	|	2024/5/13	|	1	|
|  1001	|	25	|	200	|	2024/5/14	|	1	|
|  1003	|	8	|	1000	|	2024/5/15	|	1	|
|  1001	|	14	|	200	|	2024/5/16	|	1	|
|  1002	|	18	|	500	|	2024/5/16	|	1	|
|  1003	|	24	|	1000	|	2024/5/17	|	1	|
|  1002	|	30	|	500	|	2024/5/18	|	1	|
|  1002	|	10	|	500	|	2024/5/18	|	2	|
|  1002	|	8	|	500	|	2024/5/19	|	1	|
|  1001	|	18	|	200	|	2024/5/20	|	1	|
|  1003	|	21	|	1000	|	2024/5/20	|	1	|
|  1003	|	23	|	1000	|	2024/5/21	|	1	|
|  1003	|	19	|	1000	|	2024/5/22	|	1	|
|  1003	|	7	|	1000	|	2024/5/22	|	2	|
|  1003	|	20	|	1000	|	2024/5/23	|	1	|
|  1003	|	18	|	1000	|	2024/5/23	|	2	|
|  1002	|	24	|	500	|	2024/5/24	|	1	|
|  1003	|	12	|	1000	|	2024/5/24	|	1	|
|  1002	|	22	|	500	|	2024/5/25	|	1	|
|  1003	|	25	|	1000	|	2024/5/25	|	1	|
|  1003	|	30	|	1000	|	2024/5/26	|	1	|
|  1003	|	16	|	1000	|	2024/5/27	|	1	|
|  1002	|	11	|	500	|	2024/5/28	|	1	|
|  1001	|	9	|	200	|	2024/5/29	|	1	|
|  1001	|	7	|	200	|	2024/5/29	|	2	|
|  1001	|	16	|	200	|	2024/5/30	|	1	|
|  1002	|	18	|	500	|	2024/5/31	|	1	|
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+

移動平均

計算每個產品的移動平均銷售額(最近3個訂單):

SELECTproduct,quantity*unit_price sale,sale_date,AVG(quantity*unit_price) OVER (PARTITION BY product ORDER BY sale_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg_sale
FROM sales
ORDER BY product, sale_date;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  product	|	sale	|	sale_date	|	moving_avg_sale	|
|  1001	|	2000	|	2024/5/1	|	2000	|
|  1001	|	3600	|	2024/5/2	|	2800	|
|  1001	|	4000	|	2024/5/2	|	3200	|
|  1001	|	3000	|	2024/5/3	|	3533.333333	|
|  1001	|	3400	|	2024/5/4	|	3466.666667	|
|  1001	|	6000	|	2024/5/5	|	4133.333333	|
|  1001	|	2200	|	2024/5/7	|	3866.666667	|
|  1001	|	4200	|	2024/5/7	|	4133.333333	|
|  1001	|	2400	|	2024/5/8	|	2933.333333	|
|  1001	|	2600	|	2024/5/9	|	3066.666667	|
|  1001	|	1000	|	2024/5/10	|	2000	|
|  1001	|	4400	|	2024/5/11	|	2666.666667	|
|  1001	|	5000	|	2024/5/14	|	3466.666667	|
|  1001	|	2800	|	2024/5/16	|	4066.666667	|
|  1001	|	3600	|	2024/5/20	|	3800	|
|  1001	|	1400	|	2024/5/29	|	2600	|
|  1001	|	1800	|	2024/5/29	|	2266.666667	|
|  1001	|	3200	|	2024/5/30	|	2133.333333	|
|  1002	|	7000	|	2024/5/1	|	7000	|
|  1002	|	9500	|	2024/5/3	|	8250	|
|  1002	|	11500	|	2024/5/5	|	9333.333333	|
|  1002	|	6500	|	2024/5/6	|	9166.666667	|
|  1002	|	5000	|	2024/5/9	|	7666.666667	|
|  1002	|	10000	|	2024/5/10	|	7166.666667	|
|  1002	|	5000	|	2024/5/11	|	6666.666667	|
|  1002	|	12500	|	2024/5/12	|	9166.666667	|
|  1002	|	4500	|	2024/5/13	|	7333.333333	|
|  1002	|	9000	|	2024/5/16	|	8666.666667	|
|  1002	|	5000	|	2024/5/18	|	6166.666667	|
|  1002	|	15000	|	2024/5/18	|	9666.666667	|
|  1002	|	4000	|	2024/5/19	|	8000	|
|  1002	|	12000	|	2024/5/24	|	10333.33333	|
|  1002	|	11000	|	2024/5/25	|	9000	|
|  1002	|	5500	|	2024/5/28	|	9500	|
|  1002	|	9000	|	2024/5/31	|	8500	|
|  1003	|	50000	|	2024/5/9	|	50000	|
|  1003	|	17000	|	2024/5/12	|	33500	|
|  1003	|	8000	|	2024/5/15	|	25000	|
|  1003	|	24000	|	2024/5/17	|	16333.33333	|
|  1003	|	21000	|	2024/5/20	|	17666.66667	|
|  1003	|	23000	|	2024/5/21	|	22666.66667	|
|  1003	|	19000	|	2024/5/22	|	21000	|
|  1003	|	7000	|	2024/5/22	|	16333.33333	|
|  1003	|	18000	|	2024/5/23	|	14666.66667	|
|  1003	|	20000	|	2024/5/23	|	15000	|
|  1003	|	12000	|	2024/5/24	|	16666.66667	|
|  1003	|	25000	|	2024/5/25	|	19000	|
|  1003	|	30000	|	2024/5/26	|	22333.33333	|
|  1003	|	16000	|	2024/5/27	|	23666.66667	|
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+

計數COUNT():

示例: 計算每個部門的銷售記錄總和:

SELECTdepartment,COUNT(1) OVER (PARTITION BY department) AS total_sales_count
FROM sales;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  department	|	total_sales_count	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售1|	16	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售2|	18	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
|  銷售3|	15	|
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+

求最大MXA()/小MIN()值

示例: 查找每個部門在銷售日期的最大銷售數量:

SELECTdepartment,sale_date,quantity,MAX(quantity) OVER (PARTITION BY department, sale_date) AS max_quantity_on_date
FROM sales;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  department	|	sale_date	|	quantity	|	max_quantity_on_date	|
|  銷售1|	2024/5/2	|	20	|	20	|
|  銷售1|	2024/5/3	|	15	|	15	|
|  銷售1|	2024/5/4	|	17	|	17	|
|  銷售1|	2024/5/5	|	30	|	30	|
|  銷售1|	2024/5/5	|	23	|	30	|
|  銷售1|	2024/5/7	|	11	|	11	|
|  銷售1|	2024/5/8	|	12	|	12	|
|  銷售1|	2024/5/11	|	22	|	22	|
|  銷售1|	2024/5/11	|	10	|	22	|
|  銷售1|	2024/5/14	|	25	|	25	|
|  銷售1|	2024/5/16	|	14	|	18	|
|  銷售1|	2024/5/16	|	18	|	18	|
|  銷售1|	2024/5/18	|	30	|	30	|
|  銷售1|	2024/5/29	|	7	|	9	|
|  銷售1|	2024/5/29	|	9	|	9	|
|  銷售1|	2024/5/30	|	16	|	16	|
|  銷售2|	2024/5/1	|	14	|	14	|
|  銷售2|	2024/5/3	|	19	|	19	|
|  銷售2|	2024/5/6	|	13	|	13	|
|  銷售2|	2024/5/7	|	21	|	21	|
|  銷售2|	2024/5/9	|	10	|	50	|
|  銷售2|	2024/5/9	|	50	|	50	|
|  銷售2|	2024/5/10	|	20	|	20	|
|  銷售2|	2024/5/12	|	25	|	25	|
|  銷售2|	2024/5/13	|	9	|	9	|
|  銷售2|	2024/5/15	|	8	|	8	|
|  銷售2|	2024/5/19	|	8	|	8	|
|  銷售2|	2024/5/22	|	7	|	7	|
|  銷售2|	2024/5/23	|	20	|	20	|
|  銷售2|	2024/5/24	|	24	|	24	|
|  銷售2|	2024/5/25	|	22	|	25	|
|  銷售2|	2024/5/25	|	25	|	25	|
|  銷售2|	2024/5/28	|	11	|	11	|
|  銷售2|	2024/5/31	|	18	|	18	|
|  銷售3|	2024/5/1	|	10	|	10	|
|  銷售3|	2024/5/2	|	18	|	18	|
|  銷售3|	2024/5/9	|	13	|	13	|
|  銷售3|	2024/5/10	|	5	|	5	|
|  銷售3|	2024/5/12	|	17	|	17	|
|  銷售3|	2024/5/17	|	24	|	24	|
|  銷售3|	2024/5/18	|	10	|	10	|
|  銷售3|	2024/5/20	|	18	|	21	|
|  銷售3|	2024/5/20	|	21	|	21	|
|  銷售3|	2024/5/21	|	23	|	23	|
|  銷售3|	2024/5/22	|	19	|	19	|
|  銷售3|	2024/5/23	|	18	|	18	|
|  銷售3|	2024/5/24	|	12	|	12	|
|  銷售3|	2024/5/26	|	30	|	30	|
|  銷售3|	2024/5/27	|	16	|	16	|
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+

示例: 查找每個部門在銷售日期的最小銷售數量:

SELECTdepartment,sale_date,quantity,MAX(quantity) OVER (PARTITION BY department, sale_date) AS max_quantity_on_date
FROM sales;
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+
|  department	|	sale_date	|	quantity	|	min_quantity_on_date	|
|  銷售1|	2024/5/2	|	20	|	20	|
|  銷售1|	2024/5/3	|	15	|	15	|
|  銷售1|	2024/5/4	|	17	|	17	|
|  銷售1|	2024/5/5	|	30	|	23	|
|  銷售1|	2024/5/5	|	23	|	23	|
|  銷售1|	2024/5/7	|	11	|	11	|
|  銷售1|	2024/5/8	|	12	|	12	|
|  銷售1|	2024/5/11	|	22	|	10	|
|  銷售1|	2024/5/11	|	10	|	10	|
|  銷售1|	2024/5/14	|	25	|	25	|
|  銷售1|	2024/5/16	|	14	|	14	|
|  銷售1|	2024/5/16	|	18	|	14	|
|  銷售1|	2024/5/18	|	30	|	30	|
|  銷售1|	2024/5/29	|	7	|	7	|
|  銷售1|	2024/5/29	|	9	|	7	|
|  銷售1|	2024/5/30	|	16	|	16	|
|  銷售2|	2024/5/1	|	14	|	14	|
|  銷售2|	2024/5/3	|	19	|	19	|
|  銷售2|	2024/5/6	|	13	|	13	|
|  銷售2|	2024/5/7	|	21	|	21	|
|  銷售2|	2024/5/9	|	10	|	10	|
|  銷售2|	2024/5/9	|	50	|	10	|
|  銷售2|	2024/5/10	|	20	|	20	|
|  銷售2|	2024/5/12	|	25	|	25	|
|  銷售2|	2024/5/13	|	9	|	9	|
|  銷售2|	2024/5/15	|	8	|	8	|
|  銷售2|	2024/5/19	|	8	|	8	|
|  銷售2|	2024/5/22	|	7	|	7	|
|  銷售2|	2024/5/23	|	20	|	20	|
|  銷售2|	2024/5/24	|	24	|	24	|
|  銷售2|	2024/5/25	|	22	|	22	|
|  銷售2|	2024/5/25	|	25	|	22	|
|  銷售2|	2024/5/28	|	11	|	11	|
|  銷售2|	2024/5/31	|	18	|	18	|
|  銷售3|	2024/5/1	|	10	|	10	|
|  銷售3|	2024/5/2	|	18	|	18	|
|  銷售3|	2024/5/9	|	13	|	13	|
|  銷售3|	2024/5/10	|	5	|	5	|
|  銷售3|	2024/5/12	|	17	|	17	|
|  銷售3|	2024/5/17	|	24	|	24	|
|  銷售3|	2024/5/18	|	10	|	10	|
|  銷售3|	2024/5/20	|	18	|	18	|
|  銷售3|	2024/5/20	|	21	|	18	|
|  銷售3|	2024/5/21	|	23	|	23	|
|  銷售3|	2024/5/22	|	19	|	19	|
|  銷售3|	2024/5/23	|	18	|	18	|
|  銷售3|	2024/5/24	|	12	|	12	|
|  銷售3|	2024/5/26	|	30	|	30	|
|  銷售3|	2024/5/27	|	16	|	16	|
+-------+--------+-----------+------+------------+------+------+--------+-------
-----------+

求分區內的最大/最小值

  • FIRST_VALUE() OVER(PARTITION BY … ORDER BY …):

作用: 返回在指定分區內按指定排序順序的第一個值。
應用: 常用于找出每個分組內的第一個值。

示例: 找出每個部門的最早銷售日期:

SELECTdepartment,sale_date,FIRST_VALUE(sale_date) OVER (PARTITION BY department ORDER BY sale_date) AS first_sale_date
FROM sales;
+-------+--------+-----------+------+------------+------+------+--------+
|  department	|	sale_date	|	first_sale_date	|
|  銷售1|	2024/5/2	|	2024/5/2	|
|  銷售1|	2024/5/3	|	2024/5/2	|
|  銷售1|	2024/5/4	|	2024/5/2	|
|  銷售1|	2024/5/5	|	2024/5/2	|
|  銷售1|	2024/5/5	|	2024/5/2	|
|  銷售1|	2024/5/7	|	2024/5/2	|
|  銷售1|	2024/5/8	|	2024/5/2	|
|  銷售1|	2024/5/11	|	2024/5/2	|
|  銷售1|	2024/5/11	|	2024/5/2	|
|  銷售1|	2024/5/14	|	2024/5/2	|
|  銷售1|	2024/5/16	|	2024/5/2	|
|  銷售1|	2024/5/16	|	2024/5/2	|
|  銷售1|	2024/5/18	|	2024/5/2	|
|  銷售1|	2024/5/29	|	2024/5/2	|
|  銷售1|	2024/5/29	|	2024/5/2	|
|  銷售1|	2024/5/30	|	2024/5/2	|
|  銷售2|	2024/5/1	|	2024/5/1	|
|  銷售2|	2024/5/3	|	2024/5/1	|
|  銷售2|	2024/5/6	|	2024/5/1	|
|  銷售2|	2024/5/7	|	2024/5/1	|
|  銷售2|	2024/5/9	|	2024/5/1	|
|  銷售2|	2024/5/9	|	2024/5/1	|
|  銷售2|	2024/5/10	|	2024/5/1	|
|  銷售2|	2024/5/12	|	2024/5/1	|
|  銷售2|	2024/5/13	|	2024/5/1	|
|  銷售2|	2024/5/15	|	2024/5/1	|
|  銷售2|	2024/5/19	|	2024/5/1	|
|  銷售2|	2024/5/22	|	2024/5/1	|
|  銷售2|	2024/5/23	|	2024/5/1	|
|  銷售2|	2024/5/24	|	2024/5/1	|
|  銷售2|	2024/5/25	|	2024/5/1	|
|  銷售2|	2024/5/25	|	2024/5/1	|
|  銷售2|	2024/5/28	|	2024/5/1	|
|  銷售2|	2024/5/31	|	2024/5/1	|
|  銷售3|	2024/5/1	|	2024/5/1	|
|  銷售3|	2024/5/2	|	2024/5/1	|
|  銷售3|	2024/5/9	|	2024/5/1	|
|  銷售3|	2024/5/10	|	2024/5/1	|
|  銷售3|	2024/5/12	|	2024/5/1	|
|  銷售3|	2024/5/17	|	2024/5/1	|
|  銷售3|	2024/5/18	|	2024/5/1	|
|  銷售3|	2024/5/20	|	2024/5/1	|
|  銷售3|	2024/5/20	|	2024/5/1	|
|  銷售3|	2024/5/21	|	2024/5/1	|
|  銷售3|	2024/5/22	|	2024/5/1	|
|  銷售3|	2024/5/23	|	2024/5/1	|
|  銷售3|	2024/5/24	|	2024/5/1	|
|  銷售3|	2024/5/26	|	2024/5/1	|
|  銷售3|	2024/5/27	|	2024/5/1	|
+-------+--------+-----------+------+------------+------+------+--------+
  • LAST_VALUE() OVER(PARTITION BY … ORDER BY …):

作用: 返回在指定分區內按指定排序順序的最后一個值。
應用: 由于 MySQL 中并沒有內置的 LAST_VALUE 函數,可以通過 ROW_NUMBER 窗口函數先給每行分配一個序號,然后利用 MAX() 函數結合 CASE 表達式來實現類似功能。

示例: 找出每個部門的最晚銷售日期:

SELECTdepartment,sale_date,LAST_VALUE(sale_date) OVER (PARTITION BY department ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_sale_date
FROM sales;
+-------+--------+-----------+------+------------+------+------+--------+
|  department	|	sale_date	|	last_sale_date	|
|  銷售1|	2024/5/2	|	2024/5/30	|
|  銷售1|	2024/5/3	|	2024/5/30	|
|  銷售1|	2024/5/4	|	2024/5/30	|
|  銷售1|	2024/5/5	|	2024/5/30	|
|  銷售1|	2024/5/5	|	2024/5/30	|
|  銷售1|	2024/5/7	|	2024/5/30	|
|  銷售1|	2024/5/8	|	2024/5/30	|
|  銷售1|	2024/5/11	|	2024/5/30	|
|  銷售1|	2024/5/11	|	2024/5/30	|
|  銷售1|	2024/5/14	|	2024/5/30	|
|  銷售1|	2024/5/16	|	2024/5/30	|
|  銷售1|	2024/5/16	|	2024/5/30	|
|  銷售1|	2024/5/18	|	2024/5/30	|
|  銷售1|	2024/5/29	|	2024/5/30	|
|  銷售1|	2024/5/29	|	2024/5/30	|
|  銷售1|	2024/5/30	|	2024/5/30	|
|  銷售2|	2024/5/1	|	2024/5/31	|
|  銷售2|	2024/5/3	|	2024/5/31	|
|  銷售2|	2024/5/6	|	2024/5/31	|
|  銷售2|	2024/5/7	|	2024/5/31	|
|  銷售2|	2024/5/9	|	2024/5/31	|
|  銷售2|	2024/5/9	|	2024/5/31	|
|  銷售2|	2024/5/10	|	2024/5/31	|
|  銷售2|	2024/5/12	|	2024/5/31	|
|  銷售2|	2024/5/13	|	2024/5/31	|
|  銷售2|	2024/5/15	|	2024/5/31	|
|  銷售2|	2024/5/19	|	2024/5/31	|
|  銷售2|	2024/5/22	|	2024/5/31	|
|  銷售2|	2024/5/23	|	2024/5/31	|
|  銷售2|	2024/5/24	|	2024/5/31	|
|  銷售2|	2024/5/25	|	2024/5/31	|
|  銷售2|	2024/5/25	|	2024/5/31	|
|  銷售2|	2024/5/28	|	2024/5/31	|
|  銷售2|	2024/5/31	|	2024/5/31	|
|  銷售3|	2024/5/1	|	2024/5/27	|
|  銷售3|	2024/5/2	|	2024/5/27	|
|  銷售3|	2024/5/9	|	2024/5/27	|
|  銷售3|	2024/5/10	|	2024/5/27	|
|  銷售3|	2024/5/12	|	2024/5/27	|
|  銷售3|	2024/5/17	|	2024/5/27	|
|  銷售3|	2024/5/18	|	2024/5/27	|
|  銷售3|	2024/5/20	|	2024/5/27	|
|  銷售3|	2024/5/20	|	2024/5/27	|
|  銷售3|	2024/5/21	|	2024/5/27	|
|  銷售3|	2024/5/22	|	2024/5/27	|
|  銷售3|	2024/5/23	|	2024/5/27	|
|  銷售3|	2024/5/24	|	2024/5/27	|
|  銷售3|	2024/5/26	|	2024/5/27	|
|  銷售3|	2024/5/27	|	2024/5/27	|
+-------+--------+-----------+------+------------+------+------+--------+

求當前行的前/后一個值

  • LAG() OVER(PARTITION BY … ORDER BY …):

作用: 用于獲取指定列在指定排序順序下的前一個值。
應用: 常用于比較相鄰行的值。
示例: 找出銷售量比上一次銷售量增加的產品:

select * from (
select department,product,sale_date,quantity,LAG(quantity) OVER (PARTITION BY department, product ORDER BY sale_date) AS previous_quantity
FROM sales ) t1 
where  quantity > previous_quantity;
+-------+--------+-----------+------+------------+------+------+--------+
|  department	|	product	|	sale_date	|	quantity	|	previous_quantity	|
|  銷售1|	1001	|	2024/5/4	|	17	|	15	|
|  銷售1|	1001	|	2024/5/5	|	30	|	17	|
|  銷售1|	1001	|	2024/5/8	|	12	|	11	|
|  銷售1|	1001	|	2024/5/11	|	22	|	12	|
|  銷售1|	1001	|	2024/5/14	|	25	|	22	|
|  銷售1|	1001	|	2024/5/30	|	16	|	7	|
|  銷售1|	1002	|	2024/5/16	|	18	|	10	|
|  銷售1|	1002	|	2024/5/18	|	30	|	18	|
|  銷售2|	1002	|	2024/5/3	|	19	|	14	|
|  銷售2|	1002	|	2024/5/10	|	20	|	10	|
|  銷售2|	1002	|	2024/5/12	|	25	|	20	|
|  銷售2|	1002	|	2024/5/24	|	24	|	8	|
|  銷售2|	1002	|	2024/5/31	|	18	|	11	|
|  銷售2|	1003	|	2024/5/23	|	20	|	7	|
|  銷售2|	1003	|	2024/5/25	|	25	|	20	|
|  銷售3|	1001	|	2024/5/2	|	18	|	10	|
|  銷售3|	1001	|	2024/5/20	|	18	|	5	|
|  銷售3|	1003	|	2024/5/17	|	24	|	17	|
|  銷售3|	1003	|	2024/5/21	|	23	|	21	|
|  銷售3|	1003	|	2024/5/26	|	30	|	12	|
+-------+--------+-----------+------+------------+------+------+--------+
  • LEAD() OVER(PARTITION BY … ORDER BY …):

作用: 用于獲取指定列在指定排序順序下的后一個值。
應用: 常用于比較相鄰行的值。
示例: 找出下一次銷售量較本次銷量減少的產品:

select * from (
selectdepartment,product,sale_date,quantity,LEAD(quantity) OVER (PARTITION BY department, product ORDER BY sale_date) AS next_quantity
FROM sales
) t1 
where  quantity > next_quantity;
+-------+--------+-----------+------+------------+------+------+--------+
|  department	|	product	|	sale_date	|	quantity	|	next_quantity	|
|  銷售1|	1001	|	2024/5/2	|	20	|	15	|
|  銷售1|	1001	|	2024/5/5	|	30	|	11	|
|  銷售1|	1001	|	2024/5/14	|	25	|	14	|
|  銷售1|	1001	|	2024/5/16	|	14	|	9	|
|  銷售1|	1001	|	2024/5/29	|	9	|	7	|
|  銷售1|	1002	|	2024/5/5	|	23	|	10	|
|  銷售2|	1002	|	2024/5/3	|	19	|	13	|
|  銷售2|	1002	|	2024/5/6	|	13	|	10	|
|  銷售2|	1002	|	2024/5/12	|	25	|	9	|
|  銷售2|	1002	|	2024/5/13	|	9	|	8	|
|  銷售2|	1002	|	2024/5/24	|	24	|	22	|
|  銷售2|	1002	|	2024/5/25	|	22	|	11	|
|  銷售2|	1003	|	2024/5/9	|	50	|	8	|
|  銷售2|	1003	|	2024/5/15	|	8	|	7	|
|  銷售3|	1001	|	2024/5/2	|	18	|	13	|
|  銷售3|	1001	|	2024/5/9	|	13	|	5	|
|  銷售3|	1003	|	2024/5/17	|	24	|	21	|
|  銷售3|	1003	|	2024/5/21	|	23	|	19	|
|  銷售3|	1003	|	2024/5/22	|	19	|	18	|
|  銷售3|	1003	|	2024/5/23	|	18	|	12	|
|  銷售3|	1003	|	2024/5/26	|	30	|	16	|
+-------+--------+-----------+------+------------+------+------+--------+

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14879.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同旺科技 FLUKE ADPT 隔離版發布 ---- 說明書

所需設備: 1、FLUKE ADPT 隔離版 內附鏈接; 應用于:福祿克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 應用于:福祿克Fluke 15B / 17B / 18B

利用文本圖像對比模型進行虛假信息檢測

Harnessing the Power of Text-image Contrastive Models for Automatic Detection of Online Misinformation 論文地址: CVPR 2023 Open Access Repositoryhttps://openaccess.thecvf.com/content/CVPR2023W/WMF/html/Chen_Harnessing_the_Power_of_Text-Image_Contrastive_…

51單片機學習(4)3-1 獨立按鍵控制LED亮滅

#include<REGX52.H> void main() { //P20xFE; P2_01; while(1) { if(P3_10) { P2_00&#xff1b; } else { P2_01&#xff1b; } } }

力扣周賽398題解

特殊數組Ⅰ 如果數組的每一對相鄰元素都是兩個奇偶性不同的數字&#xff0c;則該數組被認為是一個 特殊數組 。 Aging 有一個整數數組 nums。如果 nums 是一個 特殊數組 &#xff0c;返回 true&#xff0c;否則返回 false。 示例 1&#xff1a; 輸入&#xff1a;nums [1] …

SEO:屏蔽流氓蜘蛛抓取

解決屏蔽流氓蜘蛛抓取&#xff0c;如MJ12bot 、DotBot 、BLEXBot 、PetalBot 、DataForSeoBot 1、robots文件屏蔽 User-agent: MJ12bot Disallow: / User-agent:DotBot Disallow: / User-agent:BLEXBot Disallow: / User-agent:PetalBot Disallow: / User-agent:DataForSeoBot…

【C++】<知識點> 標準和文件的輸入輸出

目錄 一、輸入輸出操作 1. 相關的類 2. 標準流對象 3. istream類的成員函數 二、流操縱算子 1. 整數流的基數 2. 浮點數精度的流操縱算子 3. 域寬的流操縱算子 4. 其他的流操縱算子 5. 用戶自定義流操縱算子 三、文件讀寫 1. 文本文件的讀寫 2. 二進制文件的讀寫 3. 文件讀寫…

vue 點擊復制文本到剪貼板

一、首先在vue文件的template中定義復制按鈕 <div size"small" v-if"item.prop jadeCode" class"cell-container"><span>{{ scope.row.jadeCode }}</span> <button click"handleCopy(scope.row.jadeCode)" clas…

一周開發一個客服工單系統

開發一個客服工單系統在一周內完成&#xff0c;需要詳細的計劃和高效的執行。以下是一個詳細的開發計劃&#xff0c;涵蓋每天的主要任務和技術棧選擇&#xff1a; 演示效果&#xff1a;gofly.v1kf.com 技術棧選擇 前端&#xff1a;React.js 或 Vue.js后端&#xff1a;Go (Gin)數…

K8s是如何Watch的?

1. 概述 進入 K8s 的世界&#xff0c;會發現幾乎所有對象都被抽象為了資源(Resource)&#xff0c;包括 K8s Core Resources(Pod, Service, Namespace 等)、CRD、APIService 擴展的資源類型。同時 K8s 底層將這些資源統一抽象為了 RESTful 的存儲(Storage)&#xff0c;一方面服…

jellyfish安裝及使用(Bioinformatics工具-020)

01 背景 基因組survey以測序技術為基礎&#xff0c;基于小片段文庫的低深度測序&#xff0c;通過K-mer分析&#xff0c;快速獲得基因組大小、雜合度、重復序列比例等基本信息&#xff0c;為制定該物種的全基因組de novo測序策略提供有效依據。 jellyfish (水母) 是一個用于快…

Docker-鏡像遷移的三種方式=>備份恢復公有倉庫私有倉庫

制作好的鏡像要被別人使用&#xff0c;有三種方式&#xff1a; 1.先備份鏡像&#xff0c;別人通過u盤或者其它方式拷貝后&#xff0c;再恢復鏡像&#xff0c;這種方式比較麻煩 2.將制作的鏡像上傳到公共鏡像倉庫&#xff0c;被別人拉取后使用&#xff0c;但可能存在網絡不通暢或…

【零基礎C語言】內存函數

前言&#xff1a; 我們之前學過strcpy&#xff0c;strcmp等等函數&#xff0c;他們可以拷貝字符串和比較字符串等等&#xff0c;那么有沒有什么函數不光可以拷貝字符串還可以拷貝其他的數據呢&#xff0c;答案就是內存函數。 相較于字符串函數&#xff0c;內存函數可以拷貝的…

贖金信[簡單]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你兩個字符串&#xff1a;ransomNote和magazine&#xff0c;判斷ransomNote能不能由magazine里面的字符構成。如果可以&#xff0c;返回true&#xff1b;否則返回false。magazine中的每個字符只能在ransomNote中使用一次。 示例 …

DPDK實踐之(1)dpdk基礎使用

DPDK實踐之(1)dpdk基礎使用 Author: Once Day Date: 2024年5月19日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文檔可參考專欄&#xff1a;Linux基礎知識_Once…

java判斷日期格式的正則表達式

java判斷日期格式的正則表達式 在Java中&#xff0c;你可以使用String類的matches()方法來檢查一個字符串是否匹配特定的正則表達式。以下是一個用于判斷日期格式是否為YYYY-MM-DD的正則表達式的例子&#xff1a; public class DateValidator { public static boolean isVal…

C語言 | Leetcode C語言題解之第109題有序鏈表轉換二叉搜索樹

題目&#xff1a; 題解&#xff1a; int getLength(struct ListNode* head) {int ret 0;while (head ! NULL) {ret, head head->next;}return ret; }struct TreeNode* buildTree(struct ListNode** head, int left, int right) {if (left > right) {return NULL;}int …

Mac維護神器CleanMyMac X成為你的蘋果電腦得力助手

在數字化時代&#xff0c;Mac電腦已成為眾多用戶的首選。然而&#xff0c;隨著頻繁的使用和數據量的日益增長&#xff0c;許多Mac用戶面臨著系統雜亂、存儲空間不足以及隱私保護等問題。幸運的是&#xff0c;"CleanMyMac X"這款優化和清理工具應運而生&#xff0c;它…

ROCm上情感分析:使用循環神經網絡

15.2. 情感分析&#xff1a;使用循環神經網絡 — 動手學深度學習 2.0.0 documentation (d2l.ai) 代碼 import torch from torch import nn from d2l import torch as d2lbatch_size 64 train_iter, test_iter, vocab d2l.load_data_imdb(batch_size)class BiRNN(nn.Module):…

java抽象類,接口,枚舉練習題

第一題&#xff1a; 答案&#xff1a; class Animal{//成員變量protected String name;protected int weight;//構造方法public Animal(){this.name"refer";this.weight50;}public Animal(String name,int weight){this.namename;this.weightweight;}//成員方法publ…

Bugku Crypto 部分題目簡單題解(四)

目錄 python_jail 簡單的rsa 托馬斯.杰斐遜 這不是md5 進制轉換 affine Crack it rsa python_jail 啟動場景 使用虛擬機nc進行連接 輸入print(flag) 發現報錯&#xff0c;經過測試只能傳入10個字符多了就會報錯 利用python中help()函數&#xff0c;借報錯信息帶出flag變…