資料:
| 老師 | 主題 | 天 | 小時 |
|---|---|---|---|
| 阿爾伯特 | 藍色的 | 周三 | 10:00 |
| 阿爾伯特 | 藍色的 | 周三 | 12:00 |
| 布蘭登 | 紅色的 | 周二 | 09:00 |
| 布蘭登 | 紅色的 | 周二 | 11:00 |
| 阿爾伯特 | 青色 | 周一 | 08:30 |
| 阿爾伯特 | 青色 | 周一 | 10:30 |
| 克勞迪婭 | 灰色的 | 周四 | 08:00 |
| 克勞迪婭 | 灰色的 | 周四 | 10:00 |
| 阿爾伯特 | 粉色的 | 星期五 | 13:00 |
| 阿爾伯特 | 粉色的 | 星期五 | 14:30 |
| 瑪莎 | 綠色的 | 周三 | 12:00 |
| 瑪莎 | 綠色的 | 周三 | 14:00 |
| 阿爾伯特 | 黃色 | 星期五 | 11:00 |
| 阿爾伯特 | 黃色 | 星期五 | 12:30 |
可以看出,一個Subject的開始時間有一個記錄,同一個Subject的結束時間有另一個記錄(資料是這樣的)。我打算知道的是特定老師每周專門用于上課的小時數,比如說“Albert”。
詢問:
$result = mysqli_query($link, "SELECT SUBTIME(max(Hour), min(Hour)) AS TeachTime, Subject FROM T1 WHERE Teachers LIKE '%Albert%' GROUP BY Subject ORDER BY Subject ASC") or die(mysqli_error($link));
if (mysqli_num_rows($result)!==0) {
echo "Weekly teaching time: ";
while($row = mysqli_fetch_array($result)){
echo $row['TeachTime']." Hrs. ";
}
}
輸出:
每周教學時間:02:00 小時。02:00 小時。01:30 小時。01:30 小時。
期望的輸出:
每周教學時間:07:00 小時。
如您所見,我不知道如何執行每個結果小時數的相加。我怎樣才能做到這一點?
我也試過GROUP BY Teachers,但結果很奇怪......不是加法結果。
uj5u.com熱心網友回復:
你知道如何得到這個:
mysql> select teacher, day, min(hour), max(hour)
from T1 where teacher = 'Albert' group by teacher, day;
--------- ----------- ----------- -----------
| teacher | day | min(hour) | max(hour) |
--------- ----------- ----------- -----------
| Albert | Wednesday | 10:00:00 | 12:00:00 |
| Albert | Monday | 08:30:00 | 10:30:00 |
| Albert | Friday | 11:00:00 | 14:30:00 |
--------- ----------- ----------- -----------
您可以使用TIMESTAMPDIFF()來計算分鐘:
mysql> select teacher, day,
timestampdiff(minute, min(hour), max(hour)) as minutes
from T1 where teacher = 'Albert' group by teacher, day;
--------- ----------- ---------
| teacher | day | minutes |
--------- ----------- ---------
| Albert | Wednesday | 120 |
| Albert | Monday | 120 |
| Albert | Friday | 210 |
--------- ----------- ---------
現在將其包裝為另一個聚合查詢中的子查詢:
mysql> select teacher, sum(minutes) as total_minutes
from (
select teacher, day,
timestampdiff(minute, min(hour), max(hour)) as minutes
from T1 where teacher = 'Albert' group by teacher, day) as t
group by teacher;
--------- ---------------
| teacher | total_minutes |
--------- ---------------
| Albert | 450 |
--------- ---------------
uj5u.com熱心網友回復:
這是我最終使用的代碼,感謝Bill Karwin的指導
$result = mysqli_query($link, "SELECT Teacher, sum(TeachTime) AS WeekTime FROM (SELECT Teacher, Day, SUBTIME(max(Hour), min(Hour)) AS TeachTime FROM T1 WHERE Teacher LIKE '%Albert%' GROUP BY Teacher, Day) AS ProfTime GROUP BY Teacher") or die(mysqli_error($link));
if (mysqli_num_rows($result)!==0) {
echo "Weekly teaching time: ";
while($row = mysqli_fetch_array($result)){
echo $row['WeekTime']." Hrs. ";
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484595.html
上一篇:如何找到所有最新日期的站點?
下一篇:MYSQL左連接包括不存在的行
