如何编写SQL查询获取一行多列最小值并展示在结果最后一列
单行多列最小值SQL查询实现
你需要计算每行out、mid、in三个字段的最小值,作为最后一列Smallest返回,以下是不同场景的实现方案:
方案1:使用LEAST函数(主流数据库通用,MySQL/PostgreSQL/SQLite/SQL Server 2022+支持)
这个方案语法最简洁,处理空值后即可匹配你给出的示例效果:
SELECT id, COALESCE(`out`, '-') AS `out`, COALESCE(mid, '-') AS mid, COALESCE(`in`, '-') AS `in`, LEAST( COALESCE(`out`, 999999999), COALESCE(mid, 999999999), COALESCE(`in`, 999999999) ) AS Smallest FROM 替换为你的实际表名;
方案2:CASE WHEN兼容写法(所有数据库版本通用)
如果你使用的数据库不支持LEAST函数,可以用CASE WHEN逻辑实现,效果完全一致:
SELECT id, COALESCE(`out`, '-') AS `out`, COALESCE(mid, '-') AS mid, COALESCE(`in`, '-') AS `in`, CASE WHEN COALESCE(`out`, 999999999) <= COALESCE(mid, 999999999) AND COALESCE(`out`, 999999999) <= COALESCE(`in`, 999999999) THEN `out` WHEN COALESCE(mid, 999999999) <= COALESCE(`in`, 999999999) THEN mid ELSE `in` END AS Smallest FROM 替换为你的实际表名;
注意事项
out和in属于SQL保留关键字,查询时需要转义:MySQL用反引号`包裹,PostgreSQL/SQLite用双引号包裹,SQL Server用方括号[]包裹,避免语法报错。- 代码中的
999999999可以根据你的业务数值范围调整为更大的数值,保证大于所有业务可能出现的有效值即可,空值替换为该值后不会影响最小值的计算结果。
内容的提问来源于stack exchange,提问作者reja eja
相关产品推荐
相关产品推荐

