当前位置: 首页 > 面试题库 >

多个联接中的MySQL SUM函数

邹嘉荣
2023-03-14
问题内容

嗨,这是我的情况,我有那些桌子

Customer {id,name}
Charges {id,amount,customer_id}
Taxes {id,amount,charge_id}

所以我想总计费用和税款,然后按客户ID分组,这是我的查询

SELECT SUM(ch.amount),SUM(t.amount)
FROM Customer c
LEFT JOIN Charges ch ON ch.customer_id = c.id
LEFT JOIN Taxes t ON t.charge_id = ch.id
GROUP BY c.id;

因此,如果我有1个客户费用,而我使用SUM函数时却有2个税额,那么它会计算两次费用,例如,如果要向我显示10 $,则向我显示20 $

我知道如何通过子查询解决此问题,但是我想知道是否有任何选项可以获取没有子查询之类的正确值,例如我在上面可以使用的修改内容以解决该问题。

谢谢 !

没有子查询的更新答案

SELECT
  SUM(CASE WHEN @ch_id != ch.id
    THEN ch.amount END) AS ch_amount,
  SUM(t.amount)         AS t_sum,
  c.*,
  @ch_id := ch.id
FROM
  Customer c
  LEFT JOIN charges ch ON c.id = ch.reservation_id
  LEFT JOIN taxes t ON ch.id = t.charge_id
GROUP BY rs.id;

问题答案:

您想知道是否可以在没有子查询的情况下执行此操作。 不,你不能。

如果“收费”中的一行在“税费”中具有多个对应行,那么您不能简单地联接表而不复制“收费”行。然后,正如您所发现的,对它们进行汇总时,将获得多个副本。

您需要一种方法来获取一个虚拟表(子查询),其中每个Charge都有一行。

                    SELECT ch.customer_id,
                           ch.amount amount,
                           tx.tax tax
                      FROM Charges
                      LEFT JOIN (  
                                  SELECT SUM(amount) tax,
                                         charge_id 
                                    FROM Taxes
                                   GROUP BY charge_id
                          ) tx ON ch.id = tx.charge_id

然后,您可以将该子查询加入到“客户”表中,以按客户汇总销售额。



 类似资料:
  • 问题内容: 我有三个表: 我正在尝试创建一个视图,以便获得table的所有字段,where中的项目计数以及where中所有标签的文本数组。如果我们有: 结果应返回: 这是我到目前为止所拥有的: 这些是我得到的结果(请注意,这是不正确的): 将始终是标签的数量,而不是不同的计数值。我尝试重新排序/修改和子句,它们返回不同的结果,但不是我想要的结果。我认为我在使用该功能时遇到了麻烦,但是我不确定是否是

  • 问题内容: 我如何将下面的MySQL查询写入Rails ActiveRecord 我知道如何在两个表上编写联接;但是,我对如何在3个表上使用联接不是很有信心。 问题答案: 要重写您在问题中遇到的SQL查询,我认为它应该类似于以下内容(尽管我很难完全可视化您的模型关系,所以这有点猜测): …这样该方法可以同时处理两个联接以及子句,最后是调用。 作为更多参考: 如果要将多个关联加入同一模型,则可以简单

  • 我的数据库中有几个表: games表:有team1、team2等列。这两列都引用了另一个表Team表:与players表具有一对多关系。 玩家表:与技能表有一对一的参考。 作为团队实体中的实体,我收集了FetchType设置为LAZY的玩家。 我正在进行选择查询以获得许多游戏。无论设置为获取类型(懒惰或渴望),都需要相当长的时间才能获取游戏的所有实体,因为它会加载两个团队,并且从DB日志中可以看到

  • 我试图将QueryDSL与Spring Data JPA一起使用。

  • 我想添加表示来自其他表的计数的列。 我有三张桌子。 消息 主题 STARS_GIVED 我想以: 主题回顾 所以基本上,我想附上3列唯一值的计数(每个主题中给出的星数,在主题中有消息的唯一用户,以及每个主题中唯一消息的数量)。 我希望最终能够对类别进行筛选(看看两列)。 此外,我希望最终按我加入的计数排序。例如,我将有一个按钮,按“星星的数目”按升序排序,或按“用户的数目”按降序排序,等等。 我试

  • 问题内容: 我有三个表:,,和。 该表包含类别的名称和其类别的ID 。 在包含两列:为这篇文章的ID和该职位的类别的ID。 该表包含有关后多列-如,等 我在网址中有一个名为parent_id的变量,它对应于一个类别。我想列出所有属于parent_id值类别的帖子(而不是类别)。 例如,假设parent_id值为5。每个帖子可能属于ID为20的类别,但该类别属于父类别(其ID为5)。我想列出所有属于