sql-server - SQL CASE 表达式没有在 3 列中选择最大值,MAX 也不是
问题描述
我试图找到跨 3 列的行的最大值。我尝试了几种方法,但都失败了。
原始数据:
| max_adsl_predicted_down | max_sfbb_predicted_down | max_ufbb_predicted_down
| 10 | 60 | -1
| 10 | 80 | 350
| 10 | 1 | -1
期望的输出:
| 最大下载 |
| 60 |
| 350 |
| 10 |
数据样本和用于生成它的 SQL
Select TOP(379)
max_adsl_predicted_down,
max_sfbb_predicted_down,
max_ufbb_predicted_down
FROM table
15 80 -1
15 80 -1
15 80 -1
15 80 -1
15 80 -1
15 80 -1
10 80 350
10 80 350
使用 CASE 表达式:
SELECT TOP(379)
CASE WHEN max_ufbb_predicted_down > max_adsl_predicted_down AND max_ufbb_predicted_down > max_sfbb_predicted_down THEN max_ufbb_predicted_down
WHEN max_sfbb_predicted_down > max_adsl_predicted_down AND max_sfbb_predicted_down > max_ufbb_predicted_down THEN max_sfbb_predicted_down
WHEN max_adsl_predicted_down > max_sfbb_predicted_down AND max_adsl_predicted_down > max_ufbb_predicted_down THEN max_adsl_predicted_down
END AS max_download
FROM table
80
80
80
80
80
80
80
80
使用 MAX 表达式:
SELECT TOP(379)
(SELECT MAX(speeds)
FROM (VALUES (max_ufbb_predicted_down), (max_adsl_predicted_down), (max_sfbb_predicted_down)) as speeds(speeds) )AS max_download
FROM table
80
80
80
80
80
80
80
80
我不明白为什么这些方法没有连续返回最高值。您能否提出解决方案或这些方法不起作用的原因?
谢谢,
解决方案
SQL Server 不支持标量GREATEST
函数,与许多其他数据库一样。取而代之的是,我们可以使用一个CASE
表达式:
SELECT
CASE WHEN max_adsl_predicted_down > max_sfbb_predicted_down AND
max_adsl_predicted_down > max_ufbb_predicted_down
THEN max_adsl_predicted_down
WHEN max_sfbb_predicted_down > max_ufbb_predicted_down
THEN max_sfbb_predicted_down
ELSE max_ufbb_predicted_down END AS max_download
FROM yourTable;
col1
三列,col2
和,的一般形式更易于阅读col3
:
SELECT
CASE WHEN col1 > col2 AND col1 > col3 THEN col1
WHEN col2 > col3 THEN col2
ELSE col3 END AS greatest_col
FROM yourTable;
推荐阅读
- c# - 在 Rider 中为 dotnet 2.1 项目配置不带代码的 log4net
- archer - 如何从 Archer 的日期字段中获取自定义对象中的日期?
- c++ - 错误:'const char* HTTPREQUESTS::certificate'不是'class HTTPREQUESTS'的静态成员
- ios - 安装 Scandit 失败。该包不包含任何与该框架兼容的程序集引用或内容文件
- python - 包需要不同的 Python:2.7.17 not in '>=3.6.1' while setting up pre-commit
- microsoft-graph-api - 用户增量集合返回“空”记录
- ms-access - 为什么打开访问代码窗口会持续几分钟?
- pdf2json - 如何在nodejs中解析PDF
- selenium - Selenium - 无法访问页面对象模型属性
- java - Kafka 作为数据库缓存