代码之家  ›  专栏  ›  技术社区  ›  Dexter

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

  •  0
  • Dexter  · 技术社区  · 5 年前

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

    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
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Barmar    5 年前

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

    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