ユーザー変数の出力は、集計関数で計算してから式で使用すると予測できません。したがって、クエリは機能しませんでした。
例:
mysql> create table tbl_so_q23870035( i int );
Query OK, 0 rows affected (0.48 sec)
mysql> insert into tbl_so_q23870035 values( 2 ), ( 4 ), ( 9 ), ( 6 ), ( 15 );
Query OK, 5 rows affected (0.13 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select @s:=sum(i) as s, @s*2 as s2 from tbl_so_q23870035;
+------+------+
| s | s2 |
+------+------+
| 36 | NULL |
+------+------+
1 row in set (0.00 sec)
mysql> select s, s*2 as s2
-> from (
-> select sum(i) as s from tbl_so_q23870035
-> ) aggregated_data;
+------+------+
| s | s2 |
+------+------+
| 36 | 72 |
+------+------+
1 row in set (0.00 sec)
したがって、最初にクエリを calculate に変更HoursWorked
しInWeeks
、内側のクエリで変更してから、次にDutyDistance
外側のクエリで計算する必要があります。ユーザー変数は必要ありません。
例:
select `HoursWorked`, `InWeeks`, ( `InWeeks` * 40 - `HoursWorked` ) AS `DutyDistance`
from (
select SUM( TIME_TO_SEC( TIMEDIFF( `stop`, `start` ) ) / 3600 ) AS `HoursWorked`
, TIMESTAMPDIFF( DAY , MIN( `start` ), MAX( `stop` ) ) / 7 AS `InWeeks`
FROM `work_table`
) aggregated_data