【问题标题】:Merge records in mysql合并mysql中的记录
【发布时间】:2015-07-21 19:19:47
【问题描述】:

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

矿桌:

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

合并后(同一张表不选择)

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

查找名称和排名相同的记录以及 SUM 价格。

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

我需要使用 Join 语句来实现,或者有更快的方法吗?

【问题讨论】:

  • 提示:sum() and group by
  • 为什么 id 是 '1' 而不是 '2'?
  • 合并2到1个co id留在1?

标签: mysql merge


【解决方案1】:
SELECT name,   
SUM (price), rank
FROM tablename   
GROUP BY name, rank;  

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

【讨论】:

  • 再看需求,你缺少排名列
  • 将日期和字符串等其他值分组怎么样?我得到 null 或 0 值而不是分组一个。
【解决方案2】:

试试这个:

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

【讨论】:

  • 选择很简单,但我怎样才能删除那些重复的记录呢?
【解决方案3】:

试试这个,

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 fiddle 试过了 架构:

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

【讨论】:

  • 好的,但是如何删除第二条记录?我不想选择它们,但让第一个表看起来像第二个
【解决方案4】:

试试这个

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

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

【讨论】:

  • 选择很简单,但我怎样才能删除那些重复的记录呢?
【解决方案5】:

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

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

【讨论】:

  • 不会有任何变化,因为所有表格中的排名都是其他的
  • 0/A/12/1 9/B/35/3 那 9 id 可能是其他的,我不在乎。我需要从数据库中删除第二条重复记录
  • 已编辑问题。我需要编辑数据库,而不是选择值
  • 也就是两个操作:1 更新和 1 删除 - 或者您可以从查询结果创建一个新表。
  • 我做不到,数据太多了
猜你喜欢
  • 2012-09-15
  • 2016-02-18
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多