计算字段的总和

5

我有两个表:

  • table1 (a,b,c)
  • table2 (a,d,f)

我想要得到每个 b 对应的 d 和 f 相乘的总和。

table 1 数据

a   b      c
-------------
1   hello  3
2   bye    4

表格2数据

a  d  f
--------
1  5  3
1  2  4
2  1  3
2  2  3

结果:你好:5*3+2*4,再见:1*3+2*3
我的查询是:

  SELECT t1.a, 
         t2.d * t2.f AS m, 
         SUM(m)   
    FROM table1 AS t1, 
         table2 AS t2 
   WHERE t1.a = t2.a 
GROUP BY t1.b

那么这里出了什么问题?在mysql中,我得到了#1054 - 在字段列表中未知的列'm'


你不能使用刚创建的别名。你需要重复你的公式。 - Nicola Cossu
重复公式是什么意思? - lvil
2个回答

5

尝试:

SELECT t1.a, t2.d*t2.f AS m, SUM(t2.d*t2.f)
FROM table1 AS t1, table2 AS t2 
WHERE t1.a=t2.a GROUP BY t1.b
(即扩展别名)

5

在同一SELECT子句中,您不能引用列别名 - 您需要重新生成公式:

  SELECT t1.a, 
         t2.d * t2.f AS m, 
         SUM(t2.d * t2.f)   
    FROM table1 AS t1 
    JOIN table2 AS t2 ON t1.a = t2.a 
GROUP BY t1.b

...或使用派生表/内联视图:

SELECT x.a,
       x.m, 
       SUM(x.m)
  FROM (SELECT t1.a, 
               t2.d * t2.f AS m
          FROM table1 AS t1 
          JOIN table2 AS t2 ON t1.a = t2.a 
      GROUP BY t1.b) x

最早允许在MySQL中引用列别名的是GROUP BY子句(HAVINGORDER BY也支持列别名)。但是,大多数其他数据库只支持到ORDER BY子句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接