Как мне заполнить столбец на основе двух других столбцов той же таблицы, используя MySQL? - PullRequest
0 голосов
/ 26 марта 2019

Мои данные, как показано ниже (имя таблицы - botdata)

data

Теперь мне нужно повернуть эти данные, чтобы иметь идентификатор Chatsession в виде строк и метрики в виде столбцов.Должен быть новый столбец Met014, который должен показывать 1 только тогда, когда Met003 и Met004 равны 1. Ниже приведен код, который я использую, и результат, который я получаю.Все остальное в порядке, но как правильно заполнить Met014?

SELECT   ChatSessionID, 
 COUNT(IF(Metrics = "Met001", Metrics, NULL)) AS Met001,
COUNT(IF(Metrics = "Met002", Metrics, NULL)) AS Met002, 
COUNT(IF(Metrics = "Met003", Metrics, NULL)) AS Met003,  
COUNT(IF(Metrics = "Met004", Metrics, NULL)) AS Met004,  
COUNT(IF(Metrics = "Met005", Metrics, NULL)) AS Met005,
  COUNT(IF(Metrics = "Met006", Metrics, NULL)) AS Met006,
  COUNT(IF(Metrics = "Met007", Metrics, NULL)) AS Met007,
COUNT(IF(Metrics = "Met008", Metrics, NULL)) AS Met008,
COUNT(IF(Metrics = "Met009", Metrics, NULL)) AS Met009,
COUNT(IF(Metrics = "Met010", Metrics, NULL)) AS Met010,
COUNT(IF(Metrics = "Met011", Metrics, NULL)) AS Met011,
COUNT(IF(Metrics = "Met012", Metrics, NULL)) AS Met012,
COUNT(CASE WHEN Metrics="Met003" And Metrics="Met004" THEN Metrics ELSE NULL END) AS Met014
 FROM
botdata b
WHERE
  b.Metrics BETWEEN "Met001" AND "Met014"
GROUP BY
  ChatSessionID;

result

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Если ваши столбцы с Met001 по Met013 могут принимать значение только 1, 0 или NULL, попробуйте что-то вроде этого:

SELECT 
        T.*, (Met003 + Met004) = 2 AS Met014
    FROM
        (SELECT 
            ChatSessionID,
                Metrics = 'Met001' AS Met001,
                Metrics = 'Met002' AS Met002,
                Metrics = 'Met003' AS Met003,
                Metrics = 'Met004' AS Met004,
                Metrics = 'Met005' AS Met005,
                Metrics = 'Met006' AS Met006,
                Metrics = 'Met007' AS Met007,
                Metrics = 'Met008' AS Met008,
                Metrics = 'Met009' AS Met009,
                Metrics = 'Met010' AS Met010,
                Metrics = 'Met011' AS Met011,
                Metrics = 'Met012' AS Met012,
                Metrics = 'Met013' AS Met013
        FROM
            botdata b
        WHERE
            b.Metrics BETWEEN 'Met001' AND 'Met014'
        GROUP BY ChatSessionID) AS T;
0 голосов
/ 26 марта 2019

Я бы сказал это, используя SUM().Я думаю, что вы можете делать то, что вы хотите с LEAST():

SELECT ChatSessionID, 
       SUM(Metrics = 'Met001') AS Met001,
       SUM(Metrics = 'Met002') AS Met002,
       . . . . . . . . . . . . . . . . .,
       SUM(Metrics = 'Met012') AS Met012,
       LEAST(SUM(Metrics = 'Met003'), SUM(Metrics = 'Met004')) AS Met014
FROM botdata b
GROUP BY ChatSessionID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...