MySQL SUM 函数在多个连接中

2023-12-05

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

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 美元,则会计算两次费用金额

我知道如何通过子查询来解决这个问题,但我想知道是否有任何选项可以在没有子查询的情况下获得正确的值,例如我上面使用的查询,我可以在那里修改什么来解决这个问题。

Thanks !

没有子查询的更新答案

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;

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

如果“费用”中的一行在“税费”中具有多个对应行,则您不能简单地连接表而不重复“费用”行。然后,正如您所发现的,当您总结它们时,您将获得多个副本。

您需要一种方法来获取每个费用一行的虚拟表(子查询)。

                    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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL SUM 函数在多个连接中 的相关文章

  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 如何在SSRS中的表上创建热图?

    如何在 SSRS 中创建这样的内容 颜色将根据行中的值 承销商 从红色变为绿色 所有这些都在一个组中 您可以通过右键单击各个单元格并根据表达式设置填充颜色来完成此操作 In the Image below I ve mistakingly
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • SPARK SQL - 当时的情况

    我是 SPARK SQL 的新手 SPARK SQL 中是否有相当于 CASE WHEN CONDITION THEN 0 ELSE 1 END 的内容 select case when 1 1 then 1 else 0 end from
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

    如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int

随机推荐

  • 回顾你所学的内容

    通过回顾您在课程或教程中学到的内容 您将更深入地处理信息 这有助于长期保留 重要链接 互动测验 书签教程
  • 在 Python 中使用 len() 函数

    目录 Getting Started With Python s len 将 len 与内置序列一起使用 将 len 与内置集合一起使用 探索 len 与其他内置数据类型 Exploring len Further With Some Ex
  • 动画片

    通过使用 r和 b转义序列来控制光标的位置 您可以使用文本创建翻页书样式的动画 以下是如何制作一个旋转器来指示忙碌状态 usr bin env python from time import sleep Show the spinning
  • 使用 Beautiful Soup 和 Python 进行网页抓取(概述)

    互联网上数量惊人的数据对于任何研究领域或个人兴趣来说都是丰富的资源 为了有效地收集这些数据 您需要熟练掌握网页抓取 Python 库requests和 Beautiful Soup 是完成这项工作的强大工具 如果您喜欢通过实践示例进行学习并
  • 在 Ubuntu Linux 16.04 上安装 Python

    了解如何使用 deadsnakes PPA 在 Ubuntu 16 04 中安装 Python 3 7 deadsnakes PPA 是一个包含旧版 Ubuntu 安装的现代 Python 版本的存储库
  • While 循环和列表

    在本课中 您将学习如何使用while 环形 该代码是在视频的实时会话中调试的 一个简单的例子可能如下所示 a fizz baz buzz while a print a pop 1
  • Python 的 map() 函数入门

    以下是有关 lambda 的资源和附加文档 如何使用 Python Lambda 函数 真正的 Python 文章 如何使用 Python Lambda 函数 真正的 Python 视频课程 Lambda 表达式 Python 文档
  • 选择优质包第 2 部分

    资源和链接 如何为 GitHub 项目编写出色的自述文件 dbader org 开源许可证解释 choosealicense com
  • Python 的 map() 函数:转换 Iterables(摘要)

    在本课程中 您学习了如何map 工作原理以及如何使用它来处理可迭代对象 你还了解了一些Pythonic您可以用来替换的工具map 在你的代码中 您现在知道如何 使用Pythonmap 使用map 到过程和转换不使用显式循环的迭代 结合map
  • Python 3.9 中很酷的新功能(概述)

    Python 3 9 来了 在过去的一年里 来自世界各地的志愿者一直致力于 Python 的改进 虽然 Beta 版本已经发布了一段时间 但 Python 3 9 的第一个正式版本已于2020 年 10 月 5 日 Python 的每个版本
  • 使用需求文件

    A 需求文件是项目所有依赖项的列表 这包括依赖项所需的依赖项 它还包含每个依赖项的特定版本 用双等号指定 pip freeze将列出当前项目的依赖关系stdout 此 shell 命令会将其导出为名为的文件requirements txt
  • 多处理模块

    在本课程中 您将了解为什么要采用这种方法 因为你的代码写在函数式编程风格 你可以相当容易地并行化它 有一个平行的map构建您可以使用的 这样 您就可以并行运行处理步骤 您将导入multiprocessing模块 因为它具有并行运行此操作所需
  • JSF:从 Jar 中提供资源

    我正在创建几个装有 Facelets 模板的罐子 供整个组织使用 在 JSF 1 2 中 此功能并不是开箱即用的 堆 Jboss EAP 5 1 Seam 2 2 富脸3 3 3 在我看来 我主要需要两个资源 查找 Faclets 资源的资
  • 在特定的开始、结束日期和时间限制内运行 Quartz Scheduler 作业

    我正在使用 Quartz Scheduler 来执行重复性任务 但我遇到了麻烦 在我的服务器端 我的用户想要指定一些日期范围 例如From 2013 09 27 with in 09 00 AM 12 00 PM to 2013 09 30
  • Pinterest 的官方 OAuth2 流程似乎返回无效的访问令牌

    我按照 Pinterest 的说明进行操作验证用户身份完成步骤 2 后 我手里拿着一个访问令牌 但是 当我使用此访问令牌进行 API 调用时 我收到以下响应 status failure code 3 host coreapp devpla
  • 有没有办法让 JQuery ajax 成功函数访问它所包含的对象?

    我有这样的 JavaScript function Cat this meow function meow ajax do AJAX call success this meow var TopCat new Cat 这不起作用 因为 th
  • 如何在正则表达式子例程中访问捕获组?

    我有一个模式想在几个地方使用 但我想访问该模式的内部部分 有没有办法做到这一点 In this 简化的例子 DEFINE lt isa gt s
  • 全局内存写入在 CUDA 中是否被视为原子?

    全局内存写入在 CUDA 中是否被视为原子操作 考虑以下 CUDA 内核代码 int idx blockIdx x blockDim x threadIdx x int gidx idx 1000 globalStorage gidx so
  • 通过参考返回

    PHP 文档中写道 不要使用按引用返回来提高性能 引擎 会自动对其进行优化 我希望返回对数组的引用 这是我的类的属性 PHP 如何优化这个 因为数组不是对象 如果数组有10亿个条目 如果我不通过引用传递它 我不会得到两个在内存中存储有10亿
  • MySQL SUM 函数在多个连接中

    嗨 这是我的情况 我有那些桌子 Customer id name Charges id amount customer id Taxes id amount charge id 所以我想计算费用和税费的总和 然后按客户 ID 分组 这是我的