mysql - 如何将返回多个列的两个 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);
解决方案
由于 MySQL 在数字上下文中将布尔值视为 1 或 0,因此您可以只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 年 5 月和 2020 年 5 月)。这可能是您想要的(或者您可能正在使用WHERE
子句限制查询范围),但如果不是,您应该使用类似
EXTRACT(YEAR_MONTH FROM ts) AS mnth
将年份包含在分组依据的值中。
推荐阅读
- r - 将多个图放在一个面板中
- python - 熊猫:按不同日期过滤每个客户
- swift - 如何使用 Vapor 响应图像?
- php - 如何让 $_GET 用相同的键读取第一个变量?
- javascript - Cypress.io - 根据 cy.route() 中的请求参数以编程方式设置响应
- angular - 如何在 nativescript 中访问 webpack 环境变量?
- angular - RxJS HTTP-Client:非 JSON 的响应类型
- kubernetes - 配置 minikuke kube-system cpu 限制
- python - SQLAlchemy 与来自同一父列的 2 个 ForeinKeys 的子关系
- spring - Spring Data REST中具有多对多关系的POST请求