编写查询以加入和获取mySql中所有行的总和

时间:2015-12-25 20:03:11

标签: mysql sql performance

(抱歉标题和背景不好,我不是以英语为母语的人)

想象一下这是我的数据库表:

Table #1: Parent
╔══════════╦═════════════════╦═══════╗
║Child_id  ║Primary key - AI ║ int   ║
╠══════════╬═════════════════╬═══════╣
║parent_id ║Index-Forign_key ║ int   ║
║══════════╬═════════════════╬═══════╣
║title     ║        -        ║varchar║                   
╚══════════╩═════════════════╩═══════╝
Table #2: Paid
╔══════════╦═════════════════╦═══════╗
║Paid_id   ║Primary key - AI ║ int   ║
╠══════════╬═════════════════╬═══════╣
║child_id  ║Index-Forign_key ║ int   ║
║══════════╬═════════════════╬═══════╣
║paid_price║        -        ║int    ║                   
╚══════════╩═════════════════╩═══════╝

现在我想要一个查询,返回paid_price的总和,parent_id

我的意思是查询从child_id表中获取所有parent,然后从child_id表中获取paid_price的每个paid得到。

想象一下这些是我的桌子'数据:

 Table: parent (data)
╔══════════╦══════════╦═══════╗
║ Child_id ║parent_id ║ title ║
╠══════════╬══════════╬═══════╣
║ 1        ║25        ║bla-bla║
║══════════╬══════════╬═══════╣
║ 2        ║25        ║bla-bla║
║══════════╬══════════╬═══════╣
║ 3        ║5         ║bla-bla║
║══════════╬══════════╬═══════╣
║ 4        ║25        ║bla-bla║
╚══════════╩══════════╩═══════╝

 Table: paid (data)
╔══════════╦══════════╦════════════╗
║ Paid_id  ║Child_id  ║ paid_price ║
╠══════════╬══════════╬════════════╣
║ 1        ║1         ║1000000     ║
║══════════╬══════════╬════════════╣
║ 2        ║2         ║2500000     ║
║══════════╬══════════╬════════════╣
║ 3        ║1         ║3506000     ║
║══════════╬══════════╬════════════╣
║ 4        ║1         ║1700000     ║
╚══════════╩══════════╩════════════╝

我希望我能够很好地描述我需要的东西

*注意:这不是我的数据库结构。我只是想查询。写我真正的数据库表是比较难的。

2 个答案:

答案 0 :(得分:1)

您可以使用GROUP BYSUM()

来实现这一目标(如果我理解正确的话)

https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html

您可以通过以下查询轻松获取付费表格中每个Child_id的paid_prices的总和:

SELECT Child_id, SUM(paid_price) FROM paid GROUP BY Child_id;

如果您希望标题具有相同的结果,则可以将ON paid.Child_id = parent.Child_id作为连接条件加入。

答案 1 :(得分:0)

目前我没有一种简单的方法来测试它,但基本上你需要在child_id上加入两个表,然后在将sum()聚合函数应用于paid_price时按parent_id分组。这些方面的东西:

with J as( select P.parent_id,Q.paid_price from parent P
   inner join paid Q on P.Child_id=Q.Child_id)
select parent_id, sum(paid_price) from J group by parent_id