考虑以下数据库表
用户
#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
答案 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