2013-10-03 28 views
3

我有一个sql查询来显示stage_time表中所有stage_times的总和。但是我只需要在所有3个阶段输入值的汽车的阶段时间总和,因此car_no 3在此情况下不在列表中;初学SQL开发者,需要排除查询中的一些结果

这里是我的示例代码sqlfiddle提前http://sqlfiddle.com/#!2/1675d/78

SELECT d.*, SUM(Stage_Time) AS total 
FROM Driver d, Stage_Times st 
WHERE st.Driver_Id = d.Driver_Id AND st.Event_Id = 1 
     AND st.Stage_Id <= 3 
GROUP BY d.Driver_Id 
ORDER BY total; 

感谢所有帮助

回答

5

你可能只是增加一个HAVING子句

having count(distinct st.Stage_id) = 3 

看到更新sqlfiddle

(顺便说一句,我改变你的查询使用连接,这是一个更好的方法)。

0
select 
    d.* 
    , tt.TotalTime 
from 
    (
     select 
     d.Driver_Id 
     , SUM(st.Stage_Time) TotalTime 
     from 
     Driver d 
     inner join Stage_Times st 
     on st.Driver_Id = d.Driver_Id 
     where 
     st.Event_Id = 1 
     group by 
     d.Driver_Id 
     having 
     count(1) = 3 
) tt 
    inner join Driver d 
    on tt.Driver_Id = d.Driver_id