Php

計算 SELECT 語句中兩個列別名之間的差異?

  • October 19, 2012

我不確定如何執行查詢的最後一部分,即直接使用別名進行計算:(SUM(task_avg - minutes) A​​S 差異。我認為我不能像我想的那樣簡單,但找不到方法來做到這一點。

$result = mysql_query("SELECT U.user_name, SUM(TA.task_average*M.minutes) AS task_avg, SUM(M.minutes) AS minutes, SUM(task_avg-minutes) AS difference
                           FROM summary S
                           JOIN users U ON U.user_id = S.user_id
                           JOIN tasks TA ON TA.task_id = S.task_id
                           JOIN minutes M ON M.minutes_id = S.minutes_id
                           GROUP BY U.user_name
                           LIMIT 0 , 30");

好的。所以我要在這裡有點冒險。我可能誤解了 OP 中的數據模型,但據我了解:

1)tasks持有獨特任務列表

  1. TA.task_average= 完成一項任務所需的平均時間(分鐘)

3)users持有唯一使用者列表

4)summary表示使用者對任務的嘗試以及每次嘗試完成所需的時間(通過參考minutes表格)

這裡的粗略假設是我想出的:

首先獲取所有使用者的列表,他們在每次嘗試中完成每個任務所用的時間以及每個使用者的嘗試與任務平均值之間的差異:

select U.user_name,
TA.task_id,
TA.task_average,
M.minutes,
M.minutes-TA.task_average as diff
FROM summary S
JOIN users U ON U.user_id = S.user_id
JOIN tasks TA ON TA.task_id = S.task_id
JOIN minutes M ON M.minutes_id = S.minutes_id;

然後將其匯總以獲得與每個使用者的任務平均值的平均差異(我認為這是 OP 所要求的):

select U.user_name,
avg(M.minutes-TA.task_average) as avgDiff
FROM summary S
JOIN users U ON U.user_id = S.user_id
JOIN tasks TA ON TA.task_id = S.task_id
JOIN minutes M ON M.minutes_id = S.minutes_id
group by U.user_name
limit 0,30;

如果我有錯誤的一端,請忽略這一點。以為我會發布它以防萬一它有用。

引用自:https://dba.stackexchange.com/questions/27216