MySQL添加列来汇总来自另一列的数据

时间:2016-04-08 03:25:44

标签: mysql

我在MySQL表格中有一个专栏,其中有一个混乱的列表。数据存储为文本,如下所示:

**SIZE**
2
2-5
6-25
2-10
26-100
48
50

我想创建一个新列" RevTextSize"将此列中的数据重写为预定义的值范围。

If Size=2, then "RevTextSize"= "1-5"
If Size=2-5, then "RevTextSize"= "1-5"
If Size=6-25, then "RevTextSize"="6-25" 
...

这在Excel,SPSS和其他类似工具中很容易实现,但我怎样才能在MySQL表中执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以添加如下列:

ALTER TABLE messy_data ADD revtextsize VARCHAR(30);

填充列:

UPDATE messy_data
   SET revtextsize 
       = CASE 
         WHEN size = '2'     THEN '1-5'
         WHEN size = '2-5'   THEN '1-5'
         WHEN size = '6-25'  THEN '6-25'
         ELSE size
         END

这是一种蛮力方法,可识别size的每个不同值并指定替换值。

您可以使用另一个SQL语句来帮助您构建CASE表达式

  SELECT CONCAT('     WHEN size = ''',d.size,'''    THEN ''',d.size,'''') AS stmt
    FROM messy_data d
   GROUP BY d.size

将结果保存到您喜欢的SQL文本编辑器中,并删除替换值。这样可以加快为运行设置revtextsize列(第一个语句)所需的语句创建CASE表达式。

如果你想构建一些“更聪明”的东西,它会动态评估大小的内容并做出明智的选择,这将更加复杂。如果要这样做,我会在第二个语句中执行,生成CASE表达式。我更愿意回顾一下,因为我运行了更新语句。我更喜欢让update语句做一些易于理解的东西,并且很容易解释它正在做什么。

答案 1 :(得分:0)

使用InStr()在你的字符串中找到“ - ”并使用SUBSTRING(str,pos,len)来获得开始&结束号码。然后使用Between子句来构建Case子句。

希望这有助于构建您的解决方案。

由于