如何计算别名列上的聚合函数SUM?

afr*_*iex 6 mysql sql

如何计算别名列上的聚合函数SUM?

SELECT a.question_id, 
       a.level, 
       Count(a.question_id) AS rank, 
       Sum(rank)        AS total 
FROM   logs AS a, 
       question AS b 
WHERE  a.question_id = b.q_id 
       AND a.level = '2' 
GROUP  BY a.question_id 
ORDER  BY rank DESC 
Run Code Online (Sandbox Code Playgroud)

zes*_*ssx 14

只需使用(SELECT别名)包装重用的别名:

SELECT a.question_id, 
       a.level, 
       COUNT(a.question_id) AS rank, 
       SUM(SELECT(rank)) AS total 
FROM   logs AS a, 
       question AS b 
WHERE  a.question_id = b.q_id 
       AND a.level = '2' 
GROUP  BY a.question_id 
ORDER  BY rank DESC 
Run Code Online (Sandbox Code Playgroud)

  • `SUM(SELECT(rank))AS total`不起作用 (8认同)
  • 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在“ SELECT(...))AS ...附近在line_1处使用” (3认同)
  • 我不知道为什么这个答案被接受并且有这么多的赞成票。它给出错误语法错误 (2认同)

Gor*_*off 5

SQL的作用域规则不允许您在同一个中使用别名select.虽然这似乎不合理,但它是为了防止混淆,例如:

select 2*x as x, x+1
Run Code Online (Sandbox Code Playgroud)

x第二个变量是指哪个?

您可以使用子查询来解决此问题:

select t.*, Sum(rank) AS total 
from (SELECT a.question_id, a.level, Count(a.question_id) AS rank, 
      FROM logs AS a join
           question AS b 
           on a.question_id = b.q_id 
      WHERE a.level = '2' 
      GROUP  BY a.question_id 
     ) t
ORDER BY rank DESC
Run Code Online (Sandbox Code Playgroud)

我还修复了你的连接语法.使用逗号来表示条款中的cross join限制where是相当过时的.