2016-11-26 78 views
0

我有一個表Pontuation(Pontuacao)和住宿(Estadia)的唯一編號,我想計算每個住宿的平均Pontuation。 這是表:不同的結果爲相同的查詢,但功能內

Estadia | Pontuacao 
------------------- 
5  | 5 
------------------- 
5  | 5 

所以我做了這個funcion:

delimiter $$ 
create function mediapontuacao(estadia int) 
returns float 
begin 
    declare media float; 
    select sum(Pontuacao)/count(*) into media 
     from EstadiaUtilizador 
    where Estadia = estadia; 
    return media; 
end $$ 

如果我這樣做

select mediapontuacao(5); //calculate average pontuation of the accomodation which number is 5 

該查詢給了我396.5值。 但如果我這樣做

select sum(Pontuacao)/count(*) 
     from EstadiaUtilizador 
where Estadia = 5; 

換句話說計算其數量是5,我寫的函數應該做同樣的事情,這個查詢給我的5.00的值,它是正確的住宿的平均pontuation回答。 我覺得爲什麼我得到不同的價值時,它應該給予相同的價值,我覺得很困惑。

回答

1

的問題是在這裏:

where Estadia = estadia 

這是因爲,說的一樣,

where 1 = 1 

你的參數和列應該有不同名稱,所以DBMS知道你在說什麼。

+0

這是問題,我認爲它是不同的。謝謝。 –

0

您必須使用GROUP BY條款

select 
    Estadia, 
    sum(Pontuacao)/count(*) as mediapontuacao 
from 
    EstadiaUtilizador 
group by 
    Estadia 
having Estadia = 5 
相關問題