Как я могу объединить два запроса SQL, возвращающих несколько столбцов, в отдельные столбцы одной таблицы? - PullRequest
0 голосов
/ 07 мая 2020
• 1000
SELECT monthname(ts) as mnth, count(*) AS correct_predictions
FROM prediction 
WHERE actual = 1 AND result = 1 OR actual = 0 AND result = 0
GROUP BY monthname(ts);

SELECT monthname(ts) as mnth, count(*) AS incorrect_predictions
FROM prediction 
WHERE actual = 0 AND result = 1 OR actual = 1 AND result = 0
GROUP BY monthname(ts);

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Поскольку MySQL обрабатывает логические значения как 1 или 0 в контексте numeri c, вы можете просто SUM результат сравнения actual и result, чтобы получить требуемые столбцы:

SELECT MONTHNAME(ts) as mnth, 
       SUM(actual = result) AS correct_predictions,
       SUM(actual != result) AS incorrect_predictions
FROM prediction 
GROUP BY mnth;

Обратите внимание, что использование MONTHNAME приведет к сгруппированию значений каждого года (например, май 2019 г. - май 2020 г.). Это может быть то, что вы хотите (или, возможно, вы ограничиваете диапазон запроса с помощью предложения WHERE), но если нет, вы должны использовать что-то вроде

EXTRACT(YEAR_MONTH FROM ts) AS mnth

, чтобы включить год в значение, которое вы группируются по.

1 голос
/ 07 мая 2020

Попробуйте следующее с case

SELECT 
    monthname(ts) as mnth,
    sum(case
            when (actual = 1 AND result = 1) OR (actual = 0 AND result = 0) then 1 else 0 
        end) 
   AS correct_predictions,
    sum(case
            when (actual = 0 AND result = 1) OR (actual = 1 AND result = 0) then 1 else 0 
        end) 
   AS incorrect_predictions
FROM prediction 
GROUP BY monthname(ts);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...