2015-12-26 37 views
0

,我試圖做同樣的,但得到了一個錯誤如何行限制到基於我指的鏈接欄的總和等於一定值的Oracle

limiting the rows to where the sum a column equals a certain value in MySQL

首先,這裏是在studyplan表

enter image description here

如果我想要得到的行,直到信用列的總和等於18:

enter image description here

如果我想要得到的行,直到信用列的和等於20:

enter image description here

這是SQL語句我嘗試:

SELECT t.matricsno,t.sem,t.credit, 
(SELECT SUM(credit) FROM studyplan 
WHERE matricsno = 'D031310087') 
FROM studyplan t 
HAVING SUM(credit) = 18 
ORDER BY t.sem,t.subjectcode; 

而且我得到的錯誤是:ORA-00937:不是單組功能

感謝您的回覆和幫助。

+1

您只能使用聚合函數,如'SUM ',做'GROUP BY'時(MySQL不需要這個)。不要http://stackoverflow.com/a/14893074/112968或http://stackoverflow.com/a/14890990/112968做你想做的? – knittl

回答

3

這是使用累積和的好用例。

假設行的順序是明確由列semsubjectcode定義,如查詢所暗示的,你可以這樣寫查詢:

select * 
    from (select t.*, 
       sum(t.credit) over (order by t.sem, t.subjectcode) as credit_sum 
      from studyplan t 
     where t.matricsno = 'D031310087') 
where credit_sum <= 20 -- adjust to desired number of credits 
order by sem, subjectcode 
+0

非常感謝您的先生。我對MySQL和Oracle有點困惑。但是,好吧..我仍然是新手。 –

+0

再次感謝您,先生,我也要問。 :D –

+0

我可以再問一下這個問題嗎?是否可以移動到同一列中的下一行? 這意味着如果第一次運行它將得到1到7行的信貸總和,那麼下一次運行它將得到8到15的信貸總和。 –