首页 > 解决方案 > 如何将返回多个列的两个 SQL 查询组合到同一个表的不同列中?

问题描述

我想结合以下 SQL 查询来返回一个包含列名的表:

mnth,正确预测,错误预测

ts 是时间戳类型。

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);

标签: mysqlsql

解决方案


由于 MySQL 在数字上下文中将布尔值视为 1 或 0,因此您可以只SUM比较结果actualresult获取所需的列:

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

请注意,使用MONTHNAME将导致将每年的值组合在一起(例如 2019 年 5 月和 2020 年 5 月)。这可能是您想要的(或者您可能正在使用WHERE子句限制查询范围),但如果不是,您应该使用类似

EXTRACT(YEAR_MONTH FROM ts) AS mnth

将年份包含在分组依据的值中。


推荐阅读