3.4 逆分组

 

3.3 有序分组


假设有一个表 orders_news,其中包含了每个顾客的订单信息:

customer_id order_date product_name
1 2022-01-01,2022-01-02,2022-01-03 Product A,Product B,Product C
2 2022-01-01,2022-01-02 Product D,Product E

请按照购物的数量将一行数据拆成多行。

SPL

A
1 =file(“order_news.txt”).import@t()
2 =A1.news(product_name.split(“,”).len();customer_id,date(order_date.split(“,”)(#)):order_date,product_name.split(“,”)(#):product_name)

news()方法本质上是一个两层循环函数,先针对 A1 做循环函数,再针对第一个参数 product_name.split(“,”).len() 做循环函数。

SQL

SELECT customer_id,
  TRIM(REGEXP_SUBSTR(order_date, '[^,]+', 1, LEVEL)) AS order_date,
  TRIM(REGEXP_SUBSTR(product_name, '[^,]+', 1, LEVEL)) AS product_name
FROM order_news
CONNECT BY LEVEL <= REGEXP_COUNT(product_name, ',') + 1
AND PRIOR customer_id = customer_id
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL;

Python

Python 没有逆分组的方法,只能硬编码来实现。


4.1 基本聚合
SPL SQL Python 代码示例对比