2012-05-20 29 views
0

編輯:我想我找到了解決方案,但我仍然有興趣知道是否有人有更好的方法來做到這一點。添加「GROUP BY名稱」產生正確的輸出。mysql在單個表格中總結多組數據

我有這樣的一個表:

Name StartDate    EndDate 
name0 2012-05-18 20:00:00 2012-05-18 20:00:01 
name1 2012-05-18 20:00:00 2012-05-18 20:00:05 
name0 2012-05-18 20:00:00 2012-05-18 20:00:01 
name3 2012-05-18 20:00:00 2012-05-18 20:00:03 
name4 2012-05-18 20:00:00 2012-05-18 20:00:07 
name3 2012-05-18 20:00:00 2012-05-18 20:00:03 
name8 2012-05-18 20:00:00 2012-05-18 20:00:12 
name5 2012-05-18 20:00:00 2012-05-18 20:00:11 
name1 2012-05-18 20:00:00 2012-05-18 20:00:05 

我想學習如何做兩件事情:

1)列出不同的名字與他們的行數和的SUM他們的總運行時間

Name Count TotalRunTime 
name0 2  2 
name1 2  10 
name3 2  6 
name4 1  7 
name5 1  11 
name8 1  12 

我創建了以下查詢以嘗試一次執行這兩個操作。它適用於單一名稱,但我無法弄清楚如何使它在表格中的不同名稱列表上「迭代」。

SELECT 
    Name, 
    SUM(TIME_TO_SEC(TIMEDIFF(enddate,startdate))) TotalRunTime, 
    COUNT(*) as TotalJobs 
FROM results 
WHERE name='name0'; 

主要生產:

+-------+-------------+-----------+ 
| Name |TotalRunTime | TotalJobs | 
+-------+-------------+-----------+ 
| name0 |  1023491 |  46 | 
+-------+-------------+-----------+ 
1 row in set (0.00 sec) 

但我想要的是:

+-------+-------------+-----------+ 
| Name |TotalRunTime | TotalJobs | 
+-------+-------------+-----------+ 
| name0 |  1023491 |  46 | 
| name1 |  971621 |  35 | 
| name3 |  108843 |  22 | 
| ... |   ... |  ... | 
+-------+-------------+-----------+ 
<N> rows in set (0.00 sec) 
+4

GROUP BY是正確的方法來做到這一點。 –

回答

1

集團按name字段是最好的解決辦法:

SELECT 
    Name, 
    SUM(TIME_TO_SEC(TIMEDIFF(enddate,startdate))) TotalRunTime, 
    COUNT(*) as TotalJobs 
FROM results 
WHERE name='name0' 
GROUP BY Name;