如何在SQL中实现Excel的MRound逻辑以得到指定输出?
在SQL中实现Excel的MRound逻辑(以50000为倍数)
先明确需求:将Column1的数值四舍五入到50000的最接近整数倍,对应示例结果如下:
| Column1 | result |
|---|---|
| 248111 | 250000 |
| 217811 | 200000 |
| 354594 | 350000 |
| 230950 | 250000 |
Excel的MRound(number, multiple)核心逻辑是:返回与目标数值最接近的指定倍数的数值;若数值到两个倍数的距离相等,则取偶数倍(示例未涉及该场景)。下面针对主流SQL数据库给出实现方案:
通用核心思路
所有数据库的实现都基于同一个逻辑:先将原数值除以目标倍数,对结果四舍五入后再乘以倍数,公式抽象为:
ROUND(Column1 / 50000, 0) * 50000 AS result
1. MySQL / MariaDB
MySQL的ROUND()默认采用四舍五入规则,直接套用公式即可:
SELECT Column1, ROUND(Column1 / 50000, 0) * 50000 AS result FROM your_table;
2. SQL Server
需将倍数写成浮点型(50000.0)避免整数除法截断,语法如下:
SELECT Column1, ROUND(Column1 / 50000.0, 0) * 50000 AS result FROM your_table;
3. PostgreSQL
通过::numeric强制转换为数值类型,确保除法精度:
SELECT Column1, ROUND(Column1::numeric / 50000, 0) * 50000 AS result FROM your_table;
4. Oracle
直接使用ROUND()函数即可,无需额外处理:
SELECT Column1, ROUND(Column1 / 50000, 0) * 50000 AS result FROM your_table;
示例结果验证
代入示例数值测试上述SQL,完全符合需求:
- 248111 ÷ 50000 = 4.96222 → 四舍五入为5 → 5 × 50000 = 250000
- 217811 ÷ 50000 = 4.35622 → 四舍五入为4 → 4 × 50000 = 200000
- 354594 ÷ 50000 = 7.09188 → 四舍五入为7 → 7 × 50000 = 350000
- 230950 ÷ 50000 = 4.619 → 四舍五入为5 → 5 × 50000 = 250000
特殊场景处理(可选)
若遇到数值与两个倍数距离相等的情况(比如225000,到200000和250000的距离均为25000),Excel的MRound会返回偶数倍(200000,因为4是偶数)。以SQL Server为例,可通过CASE语句实现:
SELECT Column1, CASE WHEN MOD(Column1, 50000) = 25000 THEN CASE WHEN FLOOR(Column1 / 50000.0) % 2 = 0 THEN FLOOR(Column1 / 50000.0) * 50000 ELSE CEILING(Column1 / 50000.0) * 50000 END ELSE ROUND(Column1 / 50000.0, 0) * 50000 END AS result FROM your_table;
日常使用中,若无需处理这类场景,通用公式足够满足需求。
内容的提问来源于stack exchange,提问作者Manoj
相关产品推荐
相关产品推荐

