Suppose I have a table devTest that looks like this:
+----+------+
| id | j |
+----+------+
| 1 | 5 |
|
In standard SQL you'd do:
select id, j, (j - avg(j) over ()) / std(j) over () as jdev
from devtest;
But MySQL doesn't support analytic window functions such as AVG OVER. So in MySQL, you must select the aggregation values separately:
select d.id, d.j, (d.j - agg.javg) / agg.jstd as jdev
from devtest d
cross join (select avg(j) as javg, std(j) as jstd from devtest) agg;
Then create a view as Benjamin Crouzier suggests in his answer:
CREATE VIEW v_devtest AS
select d.id, d.j, (d.j - agg.javg) / agg.jstd as jdev
from devtest d
cross join (select avg(j) as javg, std(j) as jstd from devtest) agg;
A computed column can only calculate its value from other values in the same record. So what you are trying to do cannot be done with a calculated column.