如何使用CASE语句更新表中存储为分数形式的数据
需求背景
现有一张水果统计原始表,结构如下:
| Different Fruits(不同水果数) | Total Fruits(总水果数) | Fruits Fraction(水果占比) |
|---|---|---|
| 3 | 5 | |
| 2 | 6 | |
| 2 | 2 | |
| 4 | 6 | |
| 1 | 1 | |
| 6 | 6 | |
| 6 | 16 | |
| 4 | 20 |
需要按照以下规则填充Fruits Fraction字段,最终得到目标表:
| Different Fruits(不同水果数) | Total Fruits(总水果数) | Fruits Fraction(水果占比) |
|---|---|---|
| 3 | 5 | 3/5 |
| 2 | 6 | 2/6 |
| 2 | 2 | 2/2 |
| 4 | 6 | 4/6 |
| 1 | 1 | 1/1 |
| 6 | 6 | 6/6 |
| 6 | 16 | 6/6 |
| 4 | 20 | 4/6 |
规则说明:
当前共有6种不同的水果,单条记录的总水果数可超过6,要求用CASE语句实现逻辑:
- 当总水果数 < 6时,占比为
不同水果数/总水果数 - 当总水果数 >= 6时,占比为
不同水果数/6
占比不需要约分,用字符类型存储即可。
实现方案
可以通过CASE判断加字符串拼接实现需求,以下是通用SQL写法:
1. 仅查询结果(不修改原表)
SELECT "Different Fruits", "Total Fruits", CASE WHEN "Total Fruits" < 6 THEN CONCAT("Different Fruits", '/', "Total Fruits") ELSE CONCAT("Different Fruits", '/', 6) END AS "Fruits Fraction" FROM 你的表名;
2. 直接更新原表的占比字段
UPDATE 你的表名 SET "Fruits Fraction" = CASE WHEN "Total Fruits" < 6 THEN CONCAT("Different Fruits", '/', "Total Fruits") ELSE CONCAT("Different Fruits", '/', 6) END;
兼容说明
如果你使用的是MySQL等需要用反引号包裹带空格字段名的数据库,将语句中的双引号替换为反引号即可,例如`Different Fruits`。
内容的提问来源于stack exchange,提问作者classy_BLINK
相关产品推荐
相关产品推荐

