合并mysql中的记录

时间:2015-05-11 10:17:53

标签: mysql merge

我需要将2条记录合并为一条。

矿井表:

 ╔═════╦═══════╦═════╦═══════╗
 ║ id* ║ name  ║price║ rank  ║
 ╠═════╬═══════╬═════╬═══════╣
 ║  0  ║   A   ║ 12  ║  CAP  ║
 ║  1  ║   B   ║ 32  ║  BAC  ║
 ║  2  ║   B   ║ 13  ║  BAC  ║
 ╚═════╩═══════╩═════╩═══════╝

和合并后(同一表NOT SELECT)

 ╔═════╦═══════╦═════╦═══════╗
 ║ id* ║ name  ║price║ rank  ║
 ╠═════╬═══════╬═════╬═══════╣
 ║  0  ║   A   ║ 12  ║  CAP  ║
 ║  1  ║   B   ║ 45  ║  BAC  ║
 ╚═════╩═══════╩═════╩═══════╝

寻找名称和等级相同的记录和SUM价格。

合并数据库,并删除第二个重复记录。

我需要使用Join语句来创建它,还是有更快的方法来执行此操作?

5 个答案:

答案 0 :(得分:0)

SELECT name,   
SUM (price), rank
FROM tablename   
GROUP BY name, rank;  

此查询为您提供所需的信息。欲了解更多信息: http://www.w3resource.com/sql/aggregate-functions/sum-with-group-by.php

答案 1 :(得分:0)

试试这个:

SELECT MIN(id),name,sum(price) as price,rank,   
SUM (price)   
FROM tablename   
GROUP BY name, rank;

答案 2 :(得分:0)

试试这个,

select name,
           SUM(price),
          @rownum := @rownum + 1 AS rank
    from your_table
    cross join (select @rownum := 0) r
    group by name

排名来自这篇帖子:select increment counter in mysql

编辑: 我尝试使用SQL小提琴 架构:

CREATE TABLE name_table
(
id int,
name varchar(5),
price decimal(10),
rank int
);

insert into name_table values(0, 'A', 12, 1);
insert into name_table values(1, 'B', 32, 2);
insert into name_table values(2, 'B', 13, 2);

查询:

select    id,
          name,
          SUM(price),
          @rownum := @rownum + 1 AS rank
    from name_table
    cross join (select @rownum := 0) r
    group by name

结果:

id  name price rank
0   A     12    1
1   B     45    2

答案 3 :(得分:0)

试试这个

我认为下面是一种可以实现输出的方法

SELECT name, SUM (price), rank FROM `yourtablename` GROUP BY name, rank;

答案 4 :(得分:0)

这似乎是你所追求的......

SELECT MIN(id) id 
     , name
     , SUM(price) price 
     , rank 
  FROM my_table 
 GROUP 
    BY name
     , rank;