mysql - 使用 sql 中的 case 语句填充的三列的总和
问题描述
我需要得到 devicePoint、osPoint、browserPoint 的总和,这些总和是在 sql 中的 select 中使用 case 语句填充的。这是我的代码
SELECT *,
CASE
WHEN device='Default' THEN 1
ELSE 5
END AS devicePoint,
CASE
WHEN operating_system='Default' THEN 1
ELSE 3
END AS osPoint,
CASE
WHEN browser='Default' THEN 1
ELSE 2
END AS browserPoint,
(devicePoint + osPoint + browserPoint) as 'Total'
FROM mytable
WHERE
(
(device = 'Desktop' AND operating_system='Ios' AND browser='Firefox')
OR
(device = 'Desktop' AND operating_system='Ios' AND browser='Default')
OR
(device = 'Desktop' AND operating_system='Default' AND browser='Firefox')
OR
(device = 'Desktop' AND operating_system='Default' AND browser='Default')
OR
(device = 'Default' AND operating_system='Ios' AND browser='Default')
OR
(device = 'Default' AND operating_system='Default' AND browser='Firefox')
OR
(device = 'Default' AND operating_system='Default' AND browser='Default')
)
解决方案
使用子查询:
SELECT
devicePoint,
osPoint,
browserPoint,
(devicePoint + osPoint + browserPoint) AS Total
FROM
(
SELECT *,
CASE WHEN device = 'Default' THEN 1 ELSE 5 END AS devicePoint,
CASE WHEN operating_system = 'Default' THEN 1 ELSE 3 END AS osPoint,
CASE WHEN browser = 'Default' THEN 1 ELSE 2 END AS browserPoint
FROM mytable
WHERE
(device = 'Desktop' AND operating_system='Ios' AND browser='Firefox') OR
(device = 'Desktop' AND operating_system='Ios' AND browser='Default') OR
(device = 'Desktop' AND operating_system='Default' AND browser='Firefox') OR
(device = 'Desktop' AND operating_system='Default' AND browser='Default') OR
(device = 'Default' AND operating_system='Ios' AND browser='Default') OR
(device = 'Default' AND operating_system='Default' AND browser='Firefox') OR
(device = 'Default' AND operating_system='Default' AND browser='Default')
) t;
不可能在SELECT
定义它们的地方引用您的三个别名。但是,如果您使用上面的子查询方法,它们是可用的。
推荐阅读
- rest - 使用 cURL 的 HTTP GET 给出 SSL 错误
- oracle - 将 Oracle DB 添加到 ODBC 连接时出错
- powershell - 如何在 Powershell 中注册事件以使其保持永久状态?
- openmp - 并行使用 Eigen LeastSquaresConjugateGradient
- c# - 动态加载所有应用程序程序集 -asp net core
- java - 使用 java 使用 iText 删除添加到单个 pdf 文件中的图像之间的空间。
- tomcat - tomcat 常量池大小
- html - 如果底部低于视口,CSS将元素垂直拉伸到底部
- angular - Angular 5&6 测试错误:无法加载指令 AppComponent 的摘要
- php - 在 MacOS High Sierra 版本 10.13.4 更新后本地运行 MySQL