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