MySQL-CASE & REGEXP: Как назначить обзоры для «другого» столбца? - PullRequest
1 голос
/ 21 марта 2019

Я использую операторы CASE с REGEXP для назначения обзоров на разные группы тем. Несмотря на то, что 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 не выглядит изящным вариантом. Обратите внимание, что обзор может принадлежать нескольким темам.

Конечным результатом будет представление, которое должно выглядеть следующим образом:

The end result will be a view that should look like this

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Одним из решений было бы создание другого выражения REGEXP, которое представляет отрицание всех других выражений.Но это может быстро стать утомительным для обслуживания.

Другой вариант - просто обернуть запрос и проанализировать результаты во внешнем запросе, чтобы создать дополнительный столбец.Это должно быть просто:

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 голосов
/ 22 марта 2019

Я думаю, что мы можем использовать команду 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

Похожие: шаблон отрицания регулярных выражений в mysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...