【问题标题】:Selecting from multiple tables and adding up all occurrences from 1 table从多个表中选择并从 1 个表中添加所有出现
【发布时间】:2014-01-28 22:13:10
【问题描述】:

我有两个表,一个包含 accountID、小时和日期列,另一个包含 accountID、分钟和日期列。第一个表每个日期只有一个条目,但第二个可能有多个。我想要做的是从两个表中选择 accountID 匹配的所有内容,但将第二个表中每次出现的分钟数相加。

如果这没有意义,我深表歉意。这是一个例子:

表1:

Account ID | hours | date
1             4       2014-1-1
1             3       2014-1-2
2             2       2014-1-3
3             3       2014-1-3

表2:

Account ID | minutes | date
1            34        2014-1-1
1            36        2014-1-1
1            32        2014-1-2
1            12        2014-1-2

我不希望每天超过 1 行,因此需要合并 1 月 1 日和 1 月 2 日的分钟数,这可能吗?

编辑:我想要表 1 中的小时数和表 2 中按日期计算的分钟数总和。因此,1 月 1 日的分钟数为 70,小时数为 4。

【问题讨论】:

  • 不要道歉。让它有意义。
  • 我不知道如何表达,所以我举了一个例子。这也没有意义吗?
  • 我认为这个例子不完整。你能想到我为什么会这么想吗?
  • 混淆在于您的预期输出应该是什么。您想在第二张桌子上计算分钟数,但您并没有真正说明为什么需要第一张桌子。
  • 我需要第一张桌子的小时数

标签: php mysql join count


【解决方案1】:

您想要的是表连接上的 group by 子句。在这种情况下,您需要一个双重分组,因为您需要 id、日期配对。即使您指出它们对于帐户 ID 而言是唯一的,您也必须将小时数相加,以防止分组子句抱怨。

SELECT `Account ID`, `date`, SUM(`hours`) AS `hours`, SUM(`minutes`) AS `minutes`
FROM `table1` 
JOIN `table2` ON (`table1`.`Account ID` = `table2`.`Account ID` AND `table1`.`date` = `table2`.`date`)
GROUP BY `Account ID`, `date`;

【讨论】:

  • 是的,join 子句将合并满足on 条件的表。
  • 在结果上使用 mysql_fetch_array 时会出错,因为它是一个布尔值,为什么会这样?
  • 从文档 mysql_fetch_array 返回“如果没有更多行,则为 FALSE”。您可能有一个变量名称错误/输入错误。您可能应该在 mysql 控制台中尝试此查询并使用它,直到它返回看起来正确的结果。我根据您的问题使用了变量名称,这可能与您的数据库表名称不同。
【解决方案2】:

我不了解 Table1,但是将 Table2 的分钟数相加以具有不同的 AccountID 很简单。试试这样的函数 sum 和分组:

select AccountID, sum(minutes) as mins
from Table2
group by AccoutID

这会给你这个:

帐户 ID |分钟

1 | 114

我希望这会有所帮助。 :)


好的,如果我理解你的 cmets,你想要这个(没有关于 AccountID 的信息):

select sum(hours) as H, sum(minutes) as M, date
from Table1, Table2
where Table1.date=Table2.date
group by date

【讨论】:

  • 我想按日期总结一下
  • 按日期总结什么,第一张表?谷歌 sum 和 group by 的参考资料和示例。
  • 第二个表的分钟数。我想要每个日期的总分钟数和小时数。所以 1 月 1 日是 4 小时和 70 分钟 (36+34)
  • 我已经编辑了之前的答案。如果您还需要 AccountID 信息,请查看@Pyrce 的答案。祝你好运! :)
猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2017-10-13
  • 2021-12-30
  • 1970-01-01
  • 2022-09-28
  • 2015-11-08
  • 2014-12-16
相关资源
最近更新 更多