Avatar billede mailand Nybegynder
07. april 2004 - 15:55 Der er 3 kommentarer og
1 løsning

ASP/SQL udregn gennemsnitlig værdi i relation

Hej der...

Jeg har en tabel med 'brugere', der ser således ud:
t_users
u_id  u_name  ...

den bliver knyttet sammen med en 'survey' tabel, der har 10 spørgsmål, som kan rates med 0-10 i point.

min survey tabel ser således ud:
t_surveys
s_id  s_userid (t_users.u_id) s_q1  s_q2  ...


det, jeg godt kunne tænke mig, var at liste mine brugere efter bedst rating, så der skal altså tælles alle spørgsmålsværdierne sammen og divideres med antal surveys for brugeren. Jeg skal helst også have antal surveys pr. bruger.... er det muligt ?

#Mailand
Avatar billede fennec Nybegynder
07. april 2004 - 16:06 #1
Noget i denne retning virker måske:

select u_name, avg(s_q1)+avg(s_q2)+avg(s_q3)+avg(s_q4)+avg(s_q5)+avg(s_q6)+avg(s_q7)+avg(s_q8)+avg(s_q9)+avg(s_q10) as gennemsnit from t_users join t_surveys on t_surveys.s_userid = t_users.u_id order by gennemsnit

nu har jeg ikke lige afprøve det, men der skal måske en "group by u_name" på lige før "order by...."
Avatar billede mailand Nybegynder
07. april 2004 - 17:14 #2
Okay... semi-kompliceret konstruktion, men dette virker... med kun et kald til db, saa det er jo laekkert...!

SELECT c_id, c_contractor, c_name, c_city, c_state, c_zip, c_suspended, AVG(s_question1) + AVG(s_question2) + AVG(s_question3) + AVG(s_question4) + AVG(s_question5) + AVG(s_question6) + AVG(s_question7) + AVG(s_question8) + AVG(s_question9) + AVG(s_question10) AS intRating, COUNT(rc_id), COUNT(DISTINCT s_id) FROM referral_contractors LEFT JOIN referral_surveys ON s_contractorid = c_id LEFT JOIN referral_referral_contractors ON rc_contractorid = c_id GROUP BY c_id,c_contractor,c_name,c_city,c_state,c_zip,c_suspended ORDER BY intRating DESC

Paa den maade faar jeg al info om min contractor + antal 'referrals', surveys og hans gennemsnitlige survey rating.

Smid et svar, saa faar du lidt 'skattepligtige' point i posen...

#Mailand
Avatar billede mailand Nybegynder
07. april 2004 - 17:16 #3
... Hvorfor er det, man skal have GROUP BY med paa alle felter... ?

- det er umiddelbart det eneste, jeg ikke forstaar.

#Mailand
Avatar billede fennec Nybegynder
07. april 2004 - 19:53 #4
Det er noget med at AVG er en speciel type funktion, som kun retuerner "et" resultat. For at få den til at virke sammen med multi resultater skel de i en "group by". Fik det forklaret engang på skolen, men har glemt hvorfor. Den er i samme gruppe som sum(), max(), min(), count().... funktionerne.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester