gpt4 book ai didi

mysql - sql 将产品所有者表分组,其中包含主要所有者和串联的次要所有者的列

转载 作者:行者123 更新时间:2023-11-29 10:50:55 25 4
gpt4 key购买 nike

我有一张产品表及其所有者。每个所有者都位于自己的行中,并且具有主要或次要所有者类型。并非每个产品都有第二所有者。

我需要获取一个按产品分组的表,其中主要所有者位于一列中,所有次要所有者连接在第二列中。如果一个产品有多个主要所有者,则应选择第一个所有者,其余的归次要所有者所有。如果产品没有主要所有者,那么它应该只选择第一/任何第二所有者。

这是一个输入表:

+---------+------------+----------+
| Product | Owner Type | Owner |
+---------+------------+----------+
| a | primary | one |
| a | secondary | two |
| a | secondary | three |
| b | primary | four |
| b | secondary | five |
| c | primary | six |
| d | secondary | seven |
| e | secondary | eight |
| e | secondary | nine |
| f | primary | ten |
| f | primary | eleven |
| f | secondary | twelve |
| f | secondary | thirteen |
+---------+------------+----------+

预期结果是:

+---------+---------------+--------------------------+
| Product | Primary Owner | Secondary Owners |
+---------+---------------+--------------------------+
| a | one | two, three |
| b | four | five |
| c | six | |
| d | seven | |
| e | eight | nine |
| f | ten | eleven, twelve, thirteen |
+---------+---------------+--------------------------+

如果您注意到,产品 de 没有主要所有者,因此它会选择第一个次要所有者,然后不会再次将其包含在次要所有者中所有者栏。与有两个主要所有者的产品 f 类似。

我知道如何按产品分组并使用FOR XML PATH连接行/字段。在中,我知道如何选择所有者类型主要的第一个产品。我无法弄清楚的是选择第一个主要所有者并将其从次要所有者列中排除和/或选择第一个次要所有者(如果没有主要所有者)并将其从次要所有者列中排除所需的逻辑。

我什至不知道从哪里开始使用 SQL。

有什么想法吗?

最佳答案

实现此目的的一种方法是分配行号,优先考虑owner_type='Primary'行。然后将第一行作为主要所有者,将 group_concat 其他行作为次要所有者。

select product
,max(case when rnum=1 then owner end) as primary_owner
,group_concat(case when rnum<>1 then owner end order by rnum) as secondary_owners
from (select product,owner_type,owner,
@rn:=case when @prev_product=product then @rn+1 else 1 end as rnum,
@prev_product:=product
from tablename
cross join (select @rn:=0,@prev_product:='',@prev) r
order by product,owner_type='Primary',owner
) t
group by product
order by 1

Sample Demo

关于mysql - sql 将产品所有者表分组,其中包含主要所有者和串联的次要所有者的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43746314/

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