当前位置: 首页 > 知识库问答 >
问题:

SQLSUM()不同的表不同的列

方玄天
2023-03-14

类别表

mysql> SELECT * FROM cats;
+------+-----------+
| c_id | c_name    |
+------+-----------+
|    1 | cats 1    |
|    2 | cats 2    |
|    3 | cats 3    |
+------+-----------+

元表

mysql> SELECT * FROM meta;
+------+------+----------+-------------+-------+
| m_id | c_id | name     | description | costs |
+------+------+----------+-------------+-------+
|    1 |    1 | Abhijit1 | description | 100   |
|    2 |    1 | Abhijit2 | description | 200   |
|    3 |    2 | Abhijit3 | description | 500   |
|    4 |    3 | Abhijit4 | description | 800   |
+------+------+----------+-------------+-------+

meta和cats表公共是c_id meta表cats c_id(1)meta表有2(Abhijit1,Abhijit2)行和m_id(1,2)

事务表

mysql> SELECT * FROM transactions;
+------+------+------------+--------+
| t_id | m_id | date       | amount |
+------+------+------------+--------+
|    1 |    1 | 2016-02-01 | 50     |
|    2 |    1 | 2016-02-06 | 50     |
|    3 |    3 | 2016-02-15 | 400    |
|    4 |    4 | 2016-02-19 | 150    |
+------+------+------------+--------+

交易和元表通用的是m_id交易m_id 1有两行t_id(1,2)。此表主要用于支付金额和日期

我想为每个类别求和()所有成本(从元表)和金额(从事件表)。

表与

cats.c_id
    |
    |-----> meta.c_id
    |-----> meta.m_id
                |-----> transactions.m_id

这是错的。猫的成本ID 1是300,但这里我有400

I Want Get Return From Query Like This:
+------+-----------+--------------+---------------+
| c_id | c_name    | SUM(m.costs) | SUM(t.amount) |
+------+-----------+--------------+---------------+
|    1 | cats 1    |          300 |           100 |
|    2 | cats 2    |          500 |           400 |
|    3 | cats 3    |          800 |           150 |
+------+-----------+--------------+---------------+

这里的总和(m.成本)是一个类别的所有成本,总和(t.金额)是一个类别的所有支付

请帮助我或任何更好的想法表管理。

共有2个答案

狄宗清
2023-03-14

试试这个

SELECT cats.c_id,
       cats.c_name,
       (SELECT SUM(m.cost) FROM meta WHERE cats.c_id = m.c_id) AS cost,
      (SELECT SUM(t.cost) FROM meta WHERE t.id = m.id) AS amount
WHERE c.c_id = 1
华景同
2023-03-14

问题产生于这样一个事实:您加入事务,以获得总和(t.amount)。因此,成本值在单个记录与两个交易记录关联的情况下被计算两次。

您可以使用相关子查询来计算SUM(t.amount)来解决这个问题:

SELECT c.c_id, 
       c.c_name, 
       SUM(m.costs),
       (SELECT SUM(t.amount)
        FROM transactions AS t
        WHERE m.m_id = t.m_id)
FROM cats AS c
LEFT JOIN meta AS m ON c.c_id = m.c_id
GROUP BY c.c_id, c.c_name

输出:

c_id c_name  SUM(m.costs)   SUM(t.amount) 
-----------------------------------------
1    cats 1  300            100
2    cats 2  500            400
3    cats 3  800            150

这里演示

 类似资料:
  • 在一次采访中,有人问我是否知道x64指令的行为因所使用的CPU而异,我无法在任何地方找到任何文档,有谁知道这些指令是什么以及为什么会这样?

  • 问题内容: 我有一个可能具有或不具有相同属性值的对象的列表/集合。获得具有相同属性的对象的不同列表的最简单方法是什么?一种收集类型最适合此目的吗?例如,在C#中,我可以使用LINQ执行以下操作。 我最初的想法是使用lambdaj(链接文本),但似乎不支持此功能。 问题答案: 使用接口的实现(类T可能需要自定义方法,您可能必须自己实现)。通常,a 是开箱即用的:它使用和方法比较对象。对于简单的对象,

  • 问题内容: 我有一个包含不同部分的网页,需要将不同的CSS样式表应用于每个部分。我想知道的是如何指定要用于网页每个不同部分的CSS样式表。如果我将它们放在一起,则组件将无法正确显示。 问题答案: 您不能将不同的样式表应用于页面的不同部分。您有几种选择: 最好是使用类名称将页面的不同部分包装在div中: 然后在您的part1 CSS中,为每个CSS规则添加“ .part1”前缀,在您的part2 C

  • 我们在一个基于Swing/Spring的大型应用程序中看到以下异常。该错误发生在用户交互过程中,触发Spring通过commons logging报告警告,后者反过来调用log4j。不幸的是,我无法将这个问题分解为一个独立的示例。 Windows XP SP3、log4j-1.2.17、commons-logging-1.1.1、spring-4.1.2上的Java 8u40 未使用OSGI、we

  • 问题内容: 假设我是普通用户还是超级用户,我想显示不同的列。 覆盖在已经完全没有效果 并且定义条件类属性也不起作用(未定义)(根据上的错误)。在等效的中做同样的事情,仍然没有定义 仅供参考,可以是从前面提到的问题继承的任何类。 问题答案: 我通常定义视图类属性,例如属性。它允许你向其中添加一些动态逻辑: 使用这种方法的问题(以及为什么在函数中重新分配值不起作用)是许多视图属性在应用程序启动时被缓存

  • 假设我有一个,我想把它写到多个BigQuery表中,为每个选择一个可能不同的表。 如何使用Apache BeamAPI来完成此操作?