MySQL - 子查询条件

时间:2013-03-22 16:53:54

标签: mysql sql sql-update conditional-statements

我有两张桌子:

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个问题。但我确信单个查询更酷。 这种条件陈述略高于我的经验。我正在寻找一点帮助。

1 个答案:

答案 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 
相关问题