【问题标题】:Complex relational mysql query with sum带有 sum 的复杂关系 mysql 查询
【发布时间】:2013-06-17 15:33:21
【问题描述】:

我正在努力构建一个 mysql 查询。我需要从两个表中获取数据:

Table cash
----------
id
income_money
cashdata_id
paymentterm

_

Table cash_data
------------
id
total
user
date

所以cash_data 持有需要支付的款项,cash 持有已登记的已处理款项。
当付款被标记为完成时,cash_data 中的相关行将更新为关联的user ID 和date
这个想法是从cash_data 进行查询,并检查哪些付款有一些收入支付但未标记为完成(即没有userdate 字段数据)。
好的,到这里很简单。
问题是可能有几个cash 表行与一个cash_data 行相关,我必须选择所有cash_data 行,然后选择关系cash 行并对cash.income_money 求和 - 因为我需要将cash.totalcash.income_money 进行比较。

【问题讨论】:

  • 如果以下答案没有解决您的问题,请考虑提供 sqlfiddle。

标签: mysql database join sum


【解决方案1】:

查询总金额:

这也使用左连接来显示可能还没有付款的行。

SELECT cd.id,
       cd.total,
       sum(c.income_money) AS "Total Income"
FROM cash_data cd
LEFT JOIN cash c ON c.cashdata_id = cd.id
GROUP BY cd.id,
         cd.total;

第一个查询相当简单:

select cd.id, cd.total, sum(c.income_money) as "Total Income" from
cash_data cd  left join cash c 
on c.cashdata_id = cd.id
group by cd.id, cd.total;

SQL 小提琴:http://www.sqlfiddle.com/#!2/800b4/6

【讨论】:

    【解决方案2】:

    您需要连接这两个表。像这样:

    SELECT SUM(cash.income_money), cash_data.total, cash_data.id
    FROM cash_data 
        JOIN cash ON cash.cashdata_id=cash_data.id
    

    【讨论】:

    • 看不到任何分组... 这将简单地汇总所有内容的所有金额。请参阅:sqlfiddle.com/#!2/800b4/5,其中包含您的原始 SQL 作为第二个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多