I have two tables:
I want to get for each b to get sum of multiplication of corresponding d and f
a b c
-------------
1 hello 3
2 bye 4
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'
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With