如何查询随机数量的值以获取唯一 ID 并将它们连接成一个?
Posted
技术标签:
【中文标题】如何查询随机数量的值以获取唯一 ID 并将它们连接成一个?【英文标题】:How can I query random number of values for a unique id and concatenate them into one? 【发布时间】:2021-02-10 06:13:54 【问题描述】:我有一个有 2 列的表,第一列是客户名称,第二列是他的选择。 请注意,他可以选择多个选项(1 个或多个)!也可以做第二个订单!
例如输入如下:
| Client | Order item |
| -------- | ---------------- |
| User 1 | 1-cola |
| User 1 | 2-fries |
| User 1 | 3-burger |
| User 2 | 1-cola |
| User 2 | 2-fries |
| User 3 | 2-fries |
| User 3 | 1-cola |
| User 4 | 3-burger |
| User 5 | 1-cola |
| User 5 | 2-fries |
| User 5 | 3-burger |
| User 5 | 3-burger |
| User 5 | 1-cola |
我想要实现的是为每个订单获取一行,如下所示:
Client | Order item |
---|---|
User 1 | 1-cola - 2-fries - 3-burger |
User 2 | 1-cola - 2-fries |
User 3 | 1-cola - 2-fries |
User 4 | 3-burger |
User 5 | 1-cola - 2-fries - 3-burger |
User 5 | 1-cola - 3-burger |
注意! 1-为了客户 3,项目在连接时订购! 2- 对于客户 5,我们有 2 个订单,只需通过该订单的重复商品就可以检测到,因此将其放在新行中!
我知道这有点复杂,但我真的想知道是否可以这样做! 希望我描述得很好!
BR, 纳兹
【问题讨论】:
sql 行相对于其他行是无序的。对于User 5
,这两个1-cola
没有区别。在表中创建一个orderId
列。
你的主键是什么?
@raymondnijland 在那种情况下,再看一遍
如何识别“二阶”?
【参考方案1】:
以下是 BigQuery 标准 SQL
select client,
string_agg(order_item, ' - ' order by order_item) as order_items
from (
select *,
row_number() over(partition by client, order_item) as client_order
from `project.dataset.table`
)
group by client, client_order
# order by client, client_order
如果应用于您问题中的样本数据 - 输出是
注意:您在问题中描述的逻辑有点模糊 - 因此识别新订单和跨同一客户的多个订单“传播”商品可能与实际情况不同。要“解决”这个问题 - 您需要在逻辑中添加更多“玩家” - 可能是时间戳和/或指示新订单的显式行
【讨论】:
非常感谢 Mikhail,非常感谢您的帮助,我会进一步测试并返回! .. 是的,实际上它比这更复杂,但我试图简化并了解如何实现这部分,但不确定是在新问题中还是在此处提出完整问题更好? (顺便说一句。数据来自 GA,所以是的,我们有每个命中的时间戳)。以上是关于如何查询随机数量的值以获取唯一 ID 并将它们连接成一个?的主要内容,如果未能解决你的问题,请参考以下文章
如何在employee_id上 进行内部联接时获取每个唯一员工的销售总额