2016-11-26 1 views
0

Ich habe eine Tabelle mit Pontuation (Pontuacao) und eine eindeutige Nummer für Unterkunft (Estadia) und ich möchte die durchschnittliche pontuation jeder Unterkunft berechnen. Dies ist die Tabelle:Verschiedene Ergebnisse für die gleiche Abfrage, aber innerhalb einer Funktion

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

Also habe ich dieses 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 $$ 

Wenn ich dies tun

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

Diese Abfrage mir den Wert von 3,965 ergibt. Aber wenn ich das tun

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

Mit anderen Worten durchschnittlich pontuation die Unterkunft berechnen, die Nummer 5 ist, die genau die gleiche Sache der Funktion i tun schrieb sollte und diese Abfrage gibt mir den Wert von 5,00, das die richtigen ist Antworten. Ich bin verwirrt, warum ich verschiedene Werte bekomme, wenn es den gleichen Wert geben sollte, denke ich.

Antwort

1

Das Problem dabei ist:

where Estadia = estadia 

, die als die gleiche ist, sagen wir,

where 1 = 1 

Ihre Parameter und Spalte sollte anders haben Namen, so weiß das DBMS, wovon Sie sprechen.

+0

Das war das Problem, ich dachte, es war anders. Vielen Dank. –

0

müssen Sie verwenden GROUP BY Klausel

select 
    Estadia, 
    sum(Pontuacao)/count(*) as mediapontuacao 
from 
    EstadiaUtilizador 
group by 
    Estadia 
having Estadia = 5 
Verwandte Themen