我有一个像这样的表
| client_id | product_type |
|-----------|--------------|
| c_1 | toy |
| c_2 | toy |
| c_3 | furniture |
| c_3 | furniture |
| c_3 | book |
| c_4 | toy |
| c_4 | furniture |
| c_5 | book |
| c_5 | book |
| c_5 | book |
如您所见,每个客户可以分配多个产品。
我必须按客户拥有的产品对其进行分类。
toy
,则他们应该拥有toys
在结果表中,无论他们是否还有其他产品。furniture
,则无论是否有其他产品,他们都应在结果表中添加furnitures
。book
,则无论结果是否有其他产品,他们都应在结果表中添加books
……每个客户端只能在结果中出现一次。
对于上面的示例,结果将是:
| client_id | cat |
|-----------|------------|
| c_1 | toys |
| c_2 | toys |
| c_3 | furnitures |
| c_4 | toys |
| c_5 | books |
答案 0 :(得分:1)
您可以使用CASE分配优先级,例如
select client_id,
'cat_' +
min(case product_type
when 'toy' then '1'
when 'furniture' then '2'
when 'book' then '3'
end)
from tab
group by client_id
如果您有一个表来定义每个产品的类别/优先级,那会更容易,那么这是一个简单的联接,而不是CASE。
答案 1 :(得分:0)
我认为获得所需结果的逻辑是:
select client_id,
(case when sum(case when product_type = 'toy' then 1 else 0 end) > 0
then 'toys'
when sum(case when product_type = 'furniture' then 1 else 0 end) > 0
then 'furnitures'
when sum(case when product_type = 'book' then 1 else 0 end) > 0
then 'books'
end) as category
from t
group by client_id;