Py学习  »  DATABASE

在mysql中,我可以只使用别名将sum添加到另一个sum中吗

Dexter • 4 年前 • 892 次点击  

我有一个这样的语句,我需要将多个别名组合成另一个和,然后得到一个输出。

select 
t1.id,
sum(t2.answ = t1.answ) as answerA,
sum(t3.answ = t1.answ) as answerM,
sum(t4.answ = t1.answ) as answerD,
sum(answerA + answerM + answerD) as total
from t1
left join t2 on t2.id = t1.t2fk
left join t3 on t3.id = t1.t3fk
left join t4 on t4.id = t1.t4fk
group by t1.id // updated

sum(answerA + answerM + answerD) as total
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53934
 
892 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Barmar
Reply   •   1 楼
Barmar    4 年前

不,不能在同一查询中引用列别名。您必须将其设为子查询。

SELECT id, answerA, answerB, answerC, (answerA + answerM + answerD) AS total
FROM (
    select 
        t1.id,
        sum(t2.answ = t1.answ) as answerA,
        sum(t3.answ = t1.answ) as answerM,
        sum(t4.answ = t1.answ) as answerD,
        sum(answerA + answerM + answerD) as total
    from t1
    left join t2 on t2.id = t1.t2fk
    left join t3 on t3.id = t1.t3fk
    left join t4 on t4.id = t1.t4fk
    GROUP BY t1.id
) AS subquery

或者你可以写一个等价的表达式。

select 
    t1.id,
    sum(t2.answ = t1.answ) as answerA,
    sum(t3.answ = t1.answ) as answerM,
    sum(t4.answ = t1.answ) as answerD,
    sum(t1.answ IN (t2.answ, t3.answ, t4.answ)) as total
from t1
left join t2 on t2.id = t1.t2fk
left join t3 on t3.id = t1.t3fk
left join t4 on t4.id = t1.t4fk
GROUP BY t1.id