如何使用SQL按金额将企业数据划分为3个指定分组?
实现指定企业分组的SQL方案
原始企业数据
| 企业名称 | 金额 |
|---|---|
| Company A | 1,000,000 |
| Company B | 500,000 |
| Company C | 5,000 |
| Company D | 3,000 |
| Company E | 2,000 |
| Company F | 1,000 |
| Company G | 60 |
| Company H | 30 |
| Company I | 20 |
方法一:按指定企业名称分组(固定企业归属)
如果要求不管金额变动,指定企业必须归入对应分组,直接用CASE WHEN匹配企业名称即可:
SELECT 企业名称, 金额, CASE WHEN 企业名称 IN ('Company A', 'Company B') THEN '组1(金额极高)' WHEN 企业名称 IN ('Company C', 'Company D', 'Company E', 'Company F') THEN '组2(金额中等)' WHEN 企业名称 IN ('Company G', 'Company H', 'Company I') THEN '组3(金额极低)' END AS 分组结果 FROM 企业数据表 ORDER BY 分组结果;
这种方式严格绑定企业与分组,后续即使企业金额变化,分组归属也不会改变,适合固定企业分组的场景。
方法二:按金额阈值分组(动态匹配金额范围)
如果分组规则是基于金额范围,可通过判断金额值实现动态分组。注意需要先将带逗号的金额字符串转换为数值类型:
SELECT 企业名称, 金额, CASE WHEN CAST(REPLACE(金额, ',', '') AS DECIMAL) >= 500000 THEN '组1(金额极高)' WHEN CAST(REPLACE(金额, ',', '') AS DECIMAL) BETWEEN 1000 AND 499999 THEN '组2(金额中等)' WHEN CAST(REPLACE(金额, ',', '') AS DECIMAL) < 1000 THEN '组3(金额极低)' END AS 分组结果 FROM 企业数据表 ORDER BY 分组结果;
这种方式按金额规则自动分组,后续新增企业只要金额符合范围,就会自动归入对应分组,适合基于金额标准的分组场景。
内容的提问来源于stack exchange,提问作者Ma Hieu
相关产品推荐
相关产品推荐

