Mysql 将具有不同值的行分组并重命名

Mysql 将具有不同值的行分组并重命名,mysql,sql,Mysql,Sql,如何对具有不同值的组行进行分组并重命名,同时对其他列求和 | Dept | Value 1 | Value 2 | Value 3 | | Car1 | 2 | 4 | 9 | | Car2 | 2 | 8 | 9 | | Car3 | 1 | 4 | 9 | | MC1 | 2 | 4 | 9

如何对具有不同值的组行进行分组并重命名,同时对其他列求和

|  Dept  |  Value 1  | Value 2  |  Value 3  |

|  Car1  |  2        |  4       |  9        |

|  Car2  |  2        |  8       |  9        |

|  Car3  |  1      |  4       |  9        |

|  MC1  |  2        |  4       |  9        |

|  MC2  |  2        |  7       |  9        |

|  MC3  |  2        |  4       |  9        |

|  RV1  |  2        |  4       |  5        |

|  RV2  |  2        |  34       |  9        |

|  RV3  |  3        |  4       |  9        |

我想将car1、car2、car3分组到一个名为Car的单行中,将MC1、MC2、MC3分组到一个名为Motorcycle的单行中,将RV1、RV2、RV3分组到名为RV的单行中。列value1、value 2和value 3对每个组进行求和。

MySQL似乎没有regexp\u replace函数,可以使用的一个技巧是按大小写表达式进行分组,例如:

select
  (case
    when dept like 'Car%' then 'Car'
    when dept in ('MC1', ...) then 'MC' 
    when ...
   end) dept,
  sum(...),
  sum(...)
from ...
group by
  (case
    when dept like 'Car%' then 'Car'
    when dept in ('MC1', ...) then 'MC' 
    when ...
   end)

我认为,与标准SQL语法不同,group by在MySQL中是不必要的,无论如何,它在大多数其他DB系统中是强制性的,因此最好将其用于最终迁移目的。

这些列中的每一列都来自不同的表,它们都是外部联接。这些值是计数。到目前为止,我尝试添加一个连接,它说:内部连接从tbl.vehicles中选择dept,其中dept in car1,car2,car3 on sometable=sometable我的结果包括car1,car2,car3的值之和,但不包括dept列。所以,假设您有像“car1”和“car2”这样的实际值,并且您需要以某种方式将它们组合在一起,您可以使用substring和char_length删除最后一个字符,也可以嵌套replace函数删除数字字符,这样您就可以返回“CAR”等。试试这两种方法中的任何一种,看看这能让您走多远。case语句的问题是,如果添加了新的dept怎么办?然后你必须修改你的代码。但是,为了简化这个过程,您可以使用诸如“Car%”之类的参数,而不是键入每个值。谢谢,这非常有效。显然,除非我有点名气,否则我不能投票points@user3826011,这里有几个代表点。不要太担心投票结果,如果这回答了问题,请勾选投票结果下方的标记。“很高兴见到你。”安德鲁:好建议,我在编辑中使用了。请随意建议另一种解决方案,它不会有维护问题,没有regexThere我就什么都做不了。这里有一个语法错误。您需要删除短语“end case”中的“case”一词。当部门喜欢“Car%”时选择案例,然后当部门喜欢“MC1”时选择“Car”。。。然后“MC”当。。。端部