Avatar billede stigc Nybegynder
29. april 2001 - 00:31 Der er 6 kommentarer og
3 løsninger

sql syntaks

Jeg har en SQL sætning der lister alle brugere med deres gennemsnitsscore. User ligger i en tabel og scoren i en anden. Hvis en user ikke har nogen score-rækker (tips-tabellen) bliver brugeren ikke listet. Jeg vil have han bliver listet med et gennemsnit på nul. Kan det lade sig gøre i en SQL?

SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips \"
RIGHT JOIN user ON tips.userid = user.userid GROUP BY tips.userid, user.username
Avatar billede ziron Nybegynder
29. april 2001 - 00:41 #1
nu kan jeg ikke lige huske hvad det er der kommer ud af et tomt felt i en database, men jeg menere at det er \"notdefindet\", men det kan du jo selv lige se.

og så kan du lave en if sætning der checker om brugens score = nodefindet og så skal hans score være lig 0....

/ZIRON
Avatar billede top Nybegynder
29. april 2001 - 00:51 #2
Hvis nu alle starter med en score på 0 er du ude over problemet ikke? :-)
Avatar billede erikjacobsen Ekspert
29. april 2001 - 01:06 #3
Jeg har ikke gode erfaringer med LEFT JOIN i MySql kombineret med aggregat-
funktioner på en GROUP BY. Det virker anderledes end med en JOIN (f.eks.
user,tips). Om det kun er MySql ved jeg ikke.....
Avatar billede stigc Nybegynder
29. april 2001 - 11:50 #4
top > Den med en tom score holder ikke, da man så ikke vil kunne bruge aggregat-funktionerne til at beregne gennemsnit...

Jeg bruger Access.

Ziron>> Det lyder fornuftig. Har du et eksemple?

Avatar billede ziron Nybegynder
29. april 2001 - 15:39 #5
ikke lige... men skal da lige prøve at lave noget...

/ZIRON
Avatar billede proaccess Nybegynder
30. april 2001 - 08:21 #6
Du må kunne bruge en UNION SELECT, så du først henter de records, som du gør for nuværende, og derefter \"sammenkæder\" med de records, som ikke er i score-tabellen...

SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips RIGHT JOIN user ON tips.userid=user.userid group by tips.userid, user.username UNION SELECT 0, user.username, user.userid from user RIGHT JOIN tips ON user.userid=tips.userid where tips.userid Is Null;
Avatar billede proaccess Nybegynder
30. april 2001 - 14:26 #7
JEG IDIOT !!!  -  OVERKILL !!!  -  og den slags udtryk...

Du skal selvfølgelig \"bare\" nøjes med at bruge brugeroplysninger fra brugertabellen og score-oplysning fra scoretabellen... derved får du en \"fuld\" bruger uden score.

SELECT AVG(tips.score) as avgScore, user.username, user.userid FROM tips RIGHT JOIN user ON tips.userid=user.userid GROUP BY user.userid, user.username

ALTSÅ: Det eneste sted du skal bruge tips er ved score...
Avatar billede proaccess Nybegynder
30. april 2001 - 14:32 #8
AVG giver NULL, hvis der ingen records er... derfor kan det være en fordel at bruge:

SELECT nz(AVG(tips.score)) as .....
Avatar billede stigc Nybegynder
14. juni 2001 - 16:27 #9
lukker
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
Computerworld tilbyder specialiserede kurser i database-management

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