SQL:连接表后 SUM() 函数返回错误值

2024-03-07



我目前正在开发一个数据库项目,并且在连接表方面遇到一些问题。初始情况是:

四张桌子:

  • 任务 t ~ 50000 条记录
  • 项目 p ~ 1000 条记录
  • Workson w ~ 30000 条记录
  • 员工 e ~ 10000 条记录

表 w 有一个名为“WORKLOAD”的属性,不幸的是 SUM(w.WORKLOAD) 的结果不是预期的结果:

SELECT
p.NAME,
SUM(w.WORKLOAD) AS "Total Workload",
COUNT(DISTINCT w.ESSN) AS "Total Employees",
COUNT(DISTINCT t.NAME) AS "Finished Tasks" --t.NAME is unique
from p 
JOIN w ON(p.PNUMBER = w.PNO)
JOIN t ON(p.PNUMBER = t.PNO)
WHERE t.END_DATE is NOT NULL
GROUP BY p.PNUMBER, p.NAME

连接这些表后,SUM() 函数返回一个太大的值。我猜这是因为 SUM() 函数多次计算每个 w.WORKLOAD 值。

那么有没有像内连接这样的连接操作可以在不使用子查询的情况下解决问题呢?

提前致谢 :-)


问题在于笛卡尔积(其中一个表中的行乘以其他表中的行)。以下方法所做的假设是,每个项目都有分配了员工的工作负载(所有这些工作负载都代表所有员工,因为您的查询不显示与员工表的联接)和任务。如果情况并非如此,请考虑执行外连接而不是内连接。

这个想法是根据项目编号在其自己的派生表中执行每个聚合。然后,我们可以按项目编号连接每个派生表以获得有意义的结果。

SELECT
p.NAME,
w.workload_sum AS "Total Workload",
e.employee_count AS "Total Employees",
t.task_count AS "Finished Tasks"
from p 
JOIN (select pno, sum(workload) as workload_sum
        from w
       group by pno) w ON (w.pno=p.pnumber)
JOIN (select pno, count(distinct w.essn) as employee_count
        from w
       group by pno) e ON (e.pno=p.pnumber)
JOIN (select pno, count(distinct t.name) as task_count
        from t
       group by pno) t ON (t.pno=p.pnumber)
WHERE t.END_DATE is NOT NULL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL:连接表后 SUM() 函数返回错误值 的相关文章

随机推荐

  • 如何在 postgres 中对结果执行按位运算符?

    如果我有几行 并且我想对结果执行按位或 我该如何在 Postgres 9 x 中执行此操作 例如 我的表包含 Name col1 col2 John 1 2 Walter 1 1 Ron 1 2 我知道想要执行 select 语句 以便从列
  • 如何向非超链接 HTML 标记添加工具提示

    是否有办法向非超链接添加工具提示 IE 我希望当鼠标滑过文本时将鼠标悬停在工具提示上 我希望有一个不基于超链接的工具提示的工作示例 Thanks 如果您所说的工具提示是指title属性 您可以将其应用于许多不同的 HTML 元素 例如spa
  • 任何 Apache HttpClient 4.4 信任自签名证书的示例

    我变了HttpClient版本从旧版本到新版本4 4 并得到了许多已弃用的方法和类 原始代码可以信任自签名证书 我想替换为新方法和类 任何人都可以给我一个如何替换的指南或任何示例代码吗 谢谢 感谢您的回复 我找到了示例代码如下 SSLCon
  • Shinydashboard 标签框高度

    我正在尝试创建一个tabBox横跨整个mainPanel 我能够获得跨越整个屏幕的宽度 但无法获得同样的高度 我不希望使用像素 或其他单位 的绝对值 因为我希望该应用程序能够在不同的屏幕上使用 我玩了这个例子和example http rs
  • 用于图形的 Java 库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 用于操作图形 特别是用于社交网络分析 的最佳 Java 库是什么 我见过荣格 但我想知道你是否知道更好的
  • Shadowbox - 打开内联元素

    我正在使用 Shadowbox 和 jQuery 我可以在页面加载时打开它 我想做的是 打开影子框并显示一个表单 用户可以在其中输入他们的电子邮件地址 然后我想通过ajax提交所述表单 我将表单转储到包含在隐藏 div 中的页面上 其 id
  • Apache RewriteRule 将整个 URL 作为参数传递

    目前我的阿帕奇RewriteRule仅将原始 URL 的路径作为查询参数传递给重写的 URL 如何将整个 URL 包括方案和权限等 作为参数发送到重写的 URL I know REQUEST URI 只传递路径 我看不到任何传递整个 URL
  • Asp.Net MVC 4 使用 oAuth2 进行谷歌

    我们正在尝试为现有的 asp net MVC 4 项目启用 使用 google 登录 但现在google已经宣布弃用OpenID 2 0并建议使用OAuth2 我们发现了这个link http www asp net mvc tutoria
  • Aurelia 使可绑定的行为在对象属性上可观察

    在 Aurelia 绑定中 如果在组件中我们对属性使用可观察装饰 并且如果该属性是一个对象 那么我们将订阅该对象的所有属性 例如 import observable from aurelia framework export class C
  • 在 Rust 中,“as”是一个运算符吗?

    Rust 参考目前说了以下内容the as操作员 https doc rust lang org reference html type cast expressions 7 2 12 5 类型转换表达式 类型转换表达式用二元运算符表示as
  • 将开源 CMS 框架集成到现有的 MVC3 / MVC4 站点中 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的任务是寻找一个可以慢慢集成到一组现有网站中的开源 CMS 通过这种方式 页面可以一页一页地传送到
  • 替换 uiimage 中的特定颜色

    假设我只想更改给定 UIImageView 中的特定颜色 每个像素 如何使用以下代码将所有白色像素更改为 darkGray UIImage changeColorForImage UIImage image toColor UIColor
  • 将 pandas df 写入 csv 时出现 Unicode 编码错误

    我清理了 400 个 Excel 文件 并使用 pandas 将它们读入 python 并将所有原始数据附加到一个大 df 中 然后当我尝试将其导出到 csv 时 df to csv path header True index False
  • 在 Python 2.7 中将 print 语句分配给函数中的变量

    我正在尝试将 print 语句分配给函数中的变量 def namer fn ln Smith return value default value r print Your name is fn ln return r 但是当我运行该模块时
  • 对于 common_type,T declval() 而不是 T && declval()

    使用不是更好吗std declval声明形式 template lt class T gt T declval 1 然后是当前的 template lt class T gt T declval 2 for std common type
  • Wordpress 存储用户身份验证数据的方式背后有哪些细节?

    首先 让我定义最终目标 我想要 Wordpress 版本 2 8 来管理网站的身份验证数据 凭据和访问控制 该网站的大部分内容将使用 WordPress 但某些页面将在 Wordpress 环境之外构建 这些页面应该能够使用Wordpres
  • 模板中的 const_cast。有 unconst 修饰符吗?

    我有一个这样的模板类 template
  • 在 JavaScript 的 Promises 中捕获 Promises 中生成的错误

    Promise 中是否可能出现错误 请参阅下面的代码以供参考 我想得到promise1 catch捕获中生成的错误promise2 当前不适用于此代码 function test var promise1 new Promise funct
  • 使用 Arrays.sort() 对并行数组进行排序

    是否可以使用对数组进行排序Arrays sort 然后将另一个相关数组放置在与排序数组相同的位置 例如 String arrNames new String 5 String arrCellNo new String arrNames le
  • SQL:连接表后 SUM() 函数返回错误值

    我目前正在开发一个数据库项目 并且在连接表方面遇到一些问题 初始情况是 四张桌子 任务 t 50000 条记录 项目 p 1000 条记录 Workson w 30000 条记录 员工 e 10000 条记录 表 w 有一个名为 WORKL