首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据列中的一个单词对项目类别进行分组

根据列中的一个单词对项目类别进行分组
EN

Stack Overflow用户
提问于 2022-02-15 12:33:20
回答 3查看 118关注 0票数 1

我试图在一列中根据特定的单词将一组项目分组。例子:在“物品”栏我有:羊毛红毛衣,羊毛蓝色裤子,皮革黑色鞋,皮革棕色裤子。

我需要将这些物品分为两类,“羊毛物品”和“皮革物品”。我需要同时分类几个项目。我想我需要regexp来提取这个特定的单词,但是我不知道如何使用它。我编写的查询也返回空值,尽管我使用的是NOTNULL +,其中包含项目既不是羊毛也不是皮革的行。

代码语言:javascript
复制
    SELECT 
DISTINCT item,
       CASE WHEN item LIKE '%wool%' 
       AND NULLIF(item,'NULL') IS NOT NULL
       THEN
            1
       END AS woolitems,
       CASE WHEN item LIKE '%leather%' 
       AND NULLIF(item,'NULL') IS NOT NULL
       THEN
            1
       END AS leatheritems,
FROM   table

我需要帮助,了解如何创建一个大类别,以及如何只有行,其中的单词我正在寻找返回。(谢谢你的帮助:)

EN

回答 3

Stack Overflow用户

发布于 2022-02-15 15:14:54

考虑以下方法

代码语言:javascript
复制
select item, 
  regexp_extract(item, 'wool|leather') category
from your_table          

如果应用于你问题中的数据样本

代码语言:javascript
复制
with your_table as (
  select 'wool red sweater' item union all
  select 'wool blue trousers' union all
  select 'leather black shoes' union all
  select 'leather brown pants' 
)            

输出是

票数 2
EN

Stack Overflow用户

发布于 2022-02-15 15:21:40

如果出于某种原因,您希望使用原始查询作为起点--只需将其用un透视结束,如下面的示例所示

代码语言:javascript
复制
select item, category from (
  SELECT 
    DISTINCT item,
    CASE 
      WHEN item LIKE '%wool%' AND NULLIF(item,'NULL') IS NOT NULL
      THEN 1
    END AS woolitems,
    CASE 
      WHEN item LIKE '%leather%' AND NULLIF(item,'NULL') IS NOT NULL
      THEN 1
    END AS leatheritems,
  FROM   your_table
)
unpivot (value for category in (woolitems, leatheritems))   

带输出

票数 1
EN

Stack Overflow用户

发布于 2022-02-15 15:10:05

听起来你好像在找

代码语言:javascript
复制
SELECT
    DISTINCT item,
    CASE WHEN item LIKE '%wool%' 
           AND NULLIF(item,'NULL') IS NOT NULL THEN 'wool item'
        WHEN item LIKE '%leather%' 
           AND NULLIF(item,'NULL') IS NOT NULL THEN 'leather item'
        ELSE 'other item'
    END AS item_category
FROM `table`

这将返回一个包含2列的表:

  • 项目,
  • item_category,即:如果项目名称中有羊毛,则为
    • ‘羊毛项目’,如果项目名称中有皮革,则为
    • ‘皮革项目’,则为

    H 110‘其他项目’。

如果您想过滤掉“其他项目的”,只需将其包装到一个CTE中:

代码语言:javascript
复制
WITH temp AS (<previous query>)

SELECT * FROM temp
WHERE item_category != 'other item'

您提供的查询是返回3列:

  • 项目,如果项目名中有羊毛,则为

→1,如果项目名称中有‘皮革’,则为NULL

  • →1,NULL there

因此,对于其他项,只有NULL和NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71126509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档