我有两张桌子:
tbl_projects
tbl_projects_tasks
这是一个简单的任务管理界面。并将任务分配给项目。
我还在Tasks表中有一个名为percentage
的列,它是一个整数字段。我确实将其与0
- 100
保持一致,原因很明显。
此外,在Projects表中,我有另一个名为projectpercentagedone
此列平均与项目相关的所有任务。
这是进行平均的查询(在我的示例中使用单个projectid):
UPDATE `tbl_projects` SET
`totaltasks` = (SELECT COUNT(taskid) AS T1 FROM `tbl_projects_tasks` WHERE projectid = 10),
`projectpercentagedone` = (SELECT AVG(percentage) AS T2 FROM `tbl_projects_tasks` WHERE projectid = 10)
WHERE projectid = 10
LIMIT 1
出于更高级的设置原因,我想更进一步。
如果总AVG为100%,我想将projectvisible
的{{1}}从tbl_projects
更新为1
。
当然,我可以分离出2个问题。但我确信单个查询更酷。 这种条件陈述略高于我的经验。我正在寻找一点帮助。
答案 0 :(得分:1)
您只需将tbl_projects
加入到子查询中,该子查询就tbl_projects_tasks
进行一些计算。
UPDATE tbl_projects a
INNER JOIN
(
SELECT projectid,
COUNT(taskID) totalCount,
AVG(percentage) avgPercent
FROM tbl_projects_tasks
GROUP BY projectid
) b ON a.projectid = b.projectid
SET a.totaltasks = b.totalCount,
a.projectpercentagedone = b.avgPercent,
a.projectvisible = IF(b.avgPercent = 100, 0, 1)
WHERE a.projectid = 10