如何合并MySQL数据库表中的行

时间:2011-12-28 00:40:05

标签: mysql select merge rows

编辑:我重新阐述了这个问题,因为它看起来太复杂了。

考虑以下数据库表

用户

#id #money
1   100
2   150
3   100
4   200
5   200
6   100
7   250
8   300
9   150
10  100

合并

#mainID #mergeID
1       2
1       3

如何制定一个Select语句,该语句将合并后ID的金额相加并列入前10名?我的真实数据库有大约100&000; 000 id / money行和大约100个合并。这意味着牢记性能非常重要。

这是我希望在这个例子中输出的内容:

#id #money
1   350    // sum of the rows with id 1,2,3 because they're merged!
8   300
7   250
4   200
5   200
9   150
6   100
10  100

2 个答案:

答案 0 :(得分:0)

在表格中添加引用foreign key的{​​{1}}列。

编辑:我认为你被投票了,因为我没有说清楚。

我建议创建一个递归关系。在你的例子中,你会得到:

user.pk

您应该能够像这样编写聚合查询:

select * from user ;
id | money | ref_user
1    100       1
2    150       1
3    100       1
4    200       23
5    200       11
6    100       11

获得你需要的东西。

答案 1 :(得分:0)

经过大量的反复试验后,我发现了一种(脏)方式直接进行。就是这样:

SELECT 
  id, 
  SUM(money) AS sum_money
  IFNULL(mainID, id) AS uniqueID
FROM 
  users
LEFT OUTER JOIN
  merged
ON
  id=mergeID
GROUP BY 
  uniqueID
ORDER BY 
  sum_money
LIMIT 
  10