gpt4 book ai didi

mysql - SQL Row_number() 重复

转载 作者:行者123 更新时间:2023-11-29 17:54:23 24 4
gpt4 key购买 nike

我在使用以下代码时遇到一些问题。我正在研究一个顶级篮子问题,我试图计算篮子组合的数量,其中每笔交易应该只有 4 个项目。以下代码运行良好,但是当一笔交易购买了额外的 4 件(或更多)商品时,它将不会计入合并的篮子步骤中。

With RowNums as (
select
edw_transaction_id, row_number() over (partition by edw_transaction_id order by article_name) as row_id, article_name
from thing1
),


BasketItems as (
select a.edw_transaction_id, a.article_name as _1, b.article_name as_2,c.article_name as _3,d.article_name as _4
from (select edw_transaction_id,article_name from RowNums where row_id =1) a
join (select edw_transaction_id,article_name from RowNums where row_id =2) b
on a.edw_transaction_id = b.edw_transaction_id
join (select edw_transaction_id,article_name from RowNums where row_id =3) c
on a.edw_transaction_id = c.edw_transaction_id
join (select edw_transaction_id,article_name from RowNums where row_id =4) d
on a.edw_transaction_id = d.edw_transaction_id
),

combined_basket as (
select count(*) as basket_count, _1 as basket_item1,_2 as basket_item2,_3 as basket_item3,_4 as basket_item4
from BasketItems
group by 2,3,4,5
order by 1 desc
)

select *
from combined_basket
order by 1 desc
limit 10

BasketItems 的输出看起来像这样:

Trans Id    Row_num     Article_Name
6368773827 1 Apples
6368773827 2 Oranges
6368773827 3 Cheese
6368773827 4 Egg
6368774403 1 Apple
6368774403 2 Egg
6368774403 3 Cake
6368774403 4 Salad
6368774403 5 Egg
6368774403 6 Apple
6368774403 7 Lemon
6368774403 8 Burger

从上面的代码中可以看出,它只会计算前 4 项,而保留其余的(对于每笔交易)。有没有办法在 row_number 函数超过 4 时重复该函数,或者是否有其他方法解决此问题,以便对 4 的每个事务进行计数?

期望的结果是交易的每个项目都标记为 1 到 4。

最佳答案

您可以添加一个数学函数,即 Row_number % 4。即使没有分区,这也可以解决问题:

row_number() 超过(按文章名称排序)% 4 作为 row_id

尽管如此,我并不能 100% 确定 MySQL 中是否存在 % 作为符号。如果没有,请寻找模块化划分。

关于mysql - SQL Row_number() 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com