3.4 逆分组
假设有一个表 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 没有逆分组的方法,只能硬编码来实现。