mySQL - 将 id 传递给嵌套查询

标签 mysql nested sum

我正在尝试从同一个表中获取按用户分组的两个不同列的总和。问题是,我必须找到的总和之一需要一些额外的参数。

表 1:

userid, fname, lname

表 2:

assigned_to (is = to userid from other table), 
est_hours (est = Estimate hours),
act_hours (act = Actual Hours), 
completed_date 

我只想要已标记为已完成的条目中的 est_hours(通过在 completed_date 列中包含一个值。如果 completed_date 为空,act_hours 将为空)

我的查询的问题是我没有得到 act_hours 和 est_hours 之和的正确值。我认为这与嵌套查询不匹配正确的用户标识有关。 查询:

SELECT userid, 
       fname, 
       lname, 
       SUM(act_hours)+(SELECT SUM(est_hours) 
                       from Table2 
                       WHERE completed_date IS NULL) AS total_hours 
FROM TABLE2, 
TABLE1 
WHERE TABLE1.userid = TABLE2.assigned_to 
GROUP BY userid;

我知道我需要以某种方式将用户标识从外部查询传递到内部查询,以便 SUM(est_hours) 仅获取该用户的总和。

我一直在兜圈子,我的脑袋很痛,所以非常感谢您的帮助!!

最佳答案

不要使用隐式连接语法,这是一种反模式

改用显式连接:

SELECT 
  t1.userid, 
  t1.fname, 
  t1.lname, 
  SUM(t2.act_hours)+(SELECT SUM(t3.est_hours) 
                     FROM Table2 t3
                     WHERE t3.completed_date IS NULL
                       AND t3.assigned_to = t1.userid) AS total_hours 
FROM table2 t2
INNER JOIN table1 t1 ON (t1.userid = t2.assigned_to)
GROUP BY userid;

让你头疼的解决办法是使用表别名,然后你就可以引用同一个表的不同实例。
我强烈建议始终使用表别名重新修复所有字段,这样就不会混淆该字段来自哪个(哪个)表的实例。
这也将缩短您的行并使您的查询更具可读性。

关于mySQL - 将 id 传递给嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667484/

相关文章:

c - 如何编写 1 个 C 程序打印一个数的所有因数、因数之和并检查它是否为完美数

sql - MySQL - 仅在每个分组值的第一个实例中显示字段值?

MySQL连接问题

mysql - 每次我想查看内容时都会加载创建的 View

node.js - 使用 MongoDB 4.0 查找函数返回匹配元素

java - 解决数组中的空元素

java - 从 Ms Access 数据库切换到 Hibernate 支持的数据库

python - 如何通过语法 TupleName.index() 查找嵌套元组元素的索引

excel - VBA:如何在循环中构建嵌套字典(ByVal?)

php - 数据表中的总和是多少? PHP