我有一个终端表
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
答案 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子句充当过滤器,用于从结果集中删除重复记录。