lvil
lvil

Reputation: 4336

Sum of calculated field

I have two tables:

I want to get for each b to get sum of multiplication of corresponding d and f

table 1 data

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

table 2 data

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

result: hello:5*3+2*4 , bye:1*3+2*3
My query is:

  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

So what is wrong here? In mysql I get #1054 - Unknown column 'm' in 'field list'

Upvotes: 5

Views: 8720

Answers (2)

OMG Ponies
OMG Ponies

Reputation: 332791

You can't refer to a column alias in the same SELECT clause - you either need to reproduce the formula:

  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

..or use a derived table/inline view:

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

The earliest MySQL allows referring to column aliases is the GROUP BY clause (HAVING and ORDER BY also support column aliases). But most other databases only support as early as the ORDER BY clause.

Upvotes: 5

dkamins
dkamins

Reputation: 21948

Try:

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

(I.e. expand the alias)

Upvotes: 5

Related Questions