MySQL- CASE&REGEXP:如何将评论分配给“其他”列?

问题描述 投票:1回答:2

我正在使用REGEXP的CASE语句将评论分配到不同的主题桶中。尽管REGEXP在这方面做得很好,但有些评论可能仍未分配给任何存储桶,这就是我需要“其他”列的原因。如何修改下面的查询来实现这一目标?

SELECT 
    review, 
    CASE 
        WHEN review REGEXP 'relevant keywords' 
            AND review REGEXP 'additional keywords if necessary' 
        THEN 1 
        ELSE 0 
    END AS 'Cleanliness',
    CASE 
        WHEN review REGEXP 'relevant keywords' 
            AND review REGEXP 'additional keywords if necessary' 
        THEN 1 
        ELSE 0 
    END AS 'Food',
    CASE 
        WHEN review REGEXP 'relevant keywords' 
            AND review REGEXP 'additional keywords if necessary' 
        THEN 1 
        ELSE 0 
    END AS 'Wifi' 
FROM review_table;

我的CASE语句有多个AND条件所以添加另一个CASE声明与NOT REGEXP似乎不是一个整洁的选择。请注意,评论可以属于多个主题。

最终结果将是一个看起来像这样的视图:

mysql sql regex case
2个回答
1
投票

一种解决方案是创建另一个表示所有其他表达式否定的REGEX表达式。但这很快就会变得乏味。

另一种选择是只包装查询并分析外部查询中的结果以生成附加列。这应该很简单:

SELECT x.*, (Cleanliness + Food + Wifi = 0) AS Other
FROM (
    --- original query
) x

提示:在MySQL中,条件表达式的返回值在成功时为1,在失败时为0。这意味着这个表达式:

CASE 
    WHEN review REGEXP 'relevant keywords' 
        AND review REGEXP 'additional keywords if necessary' 
    THEN 1 
    ELSE 0 
END AS 'Cleanliness'

也可以写成:

(
    review REGEXP 'relevant keywords' 
    AND review REGEXP 'additional keywords if necessary' 
) AS 'Cleanliness'

0
投票

我想我们可以使用NOT(expression)命令

    CASE 
        WHEN review NOT (REGEXP 'relevant keywords' 
            AND review REGEXP 'additional keywords if necessary' )
        THEN 1 
        ELSE 0 
    END AS 'Irrelevant' 

参考:https://dev.mysql.com/doc/refman/5.7/en/regexp.html

相关:negate regex pattern in mysql

© www.soinside.com 2019 - 2024. All rights reserved.