如何查询随机数量的值以获取唯一 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上 进行内部联接时获取每个唯一员工的销售总额

我们如何生成一定数量的随机数并将它们相互链接,而无需将数字链接到自身? [复制]

如何从 WCF 打印数组的值以形成标签?

从多个链接中获取 url 参数并将它们组合成一个 url