使用内部联接mysql获取值的总和

时间:2014-04-04 12:51:13

标签: mysql sql

我有一个终端表

Id   status

1   Online 

2   Offline

3   Offline

我有一个单独的表格,我可以在其中找到上下车时间的总时数/日期。

TOTAL_TIME

Id  up  down

1   10   14

2   20   4

3   15   9

1   5    19

2   4    20

3  10    14

我想显示终端ID,状态和TOTAL上下停机时间(1 = 15(上),2 = 24(上),3 = 25(上)。我正在使用内连接,我没有想法我将如何得到上升和下降的总和..

SELECT terminal.Id, terminal.status, total_time.Id, SUM(total_time.up),SUM(total_time.down)
FROM terminal
INNER JOIN total_time
ON terminal.Id = total_time.Id
WHERE terminal.Id = total_time.Id

3 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题。我将您的问题解释为仅询问当前状态的总和。如果这不是你想要的(也许你想要两次的总和),请告诉我。

SELECT t.id, t.status, IF(t.status = 'Online', ttlTime.upTime, ttlTime.downTime) as totalTime
FROM terminal t
    JOIN
        (SELECT tt.id, SUM(tt.up) as upTime, SUM(tt.down) AS downTime
        FROM total_time tt
        GROUP BY tt.id) ttlTime ON t.id = ttlTime.id

请参阅SQLFiddle

答案 1 :(得分:0)

你得到内心的总和"使用GROUP BY子句。 尝试:

SELECT terminal.Id, SUM(total_time.up), SUM(total_time.down)
FROM terminal
INNER JOIN total_time
ON terminal.Id = total_time.Id
GROUP BY terminal.Id

答案 2 :(得分:-1)

SELECT DISTINCT terminal.Id, terminal.status, total_time.Id, SUM(total_time.up),SUM(total_time.down)
FROM terminal
INNER JOIN total_time
ON terminal.Id = total_time.Id

应该这样做。 DISTINCT子句充当过滤器,用于从结果集中删除重复记录。