Avatar billede bernhof Nybegynder
07. februar 2004 - 18:32 Der er 8 kommentarer og
1 løsning

Hjælp til Access 2002 SQL-query

Hej!

Jeg har:
- en tabel tblBrugere med alle brugere.
- en tabel tblPost med alle poster oprettet af disse brugere

tblBrugere består bl.a. af:
- bruger_id
- bruger_navn

tblPost består bl.a. af:
- post_id

Jeg vil nu gerne stykke en SQL-query sammen, som kan liste de 5 brugeres navne, som har oprettet flest poster, hvor den, som har oprettet flest poster står øverst på listen. Jeg skal ydermere kunne hente antallet af poster hver af disse brugere har oprettet.

Eksempel:

1. John - 50 poster
2. Peter - 30 poster
osv.

Jeg behøver ikke noget ASP-kode - kun SQL-query'en. Nogen der kan hjælpe?
Avatar billede bernhof Nybegynder
07. februar 2004 - 18:33 #1
Ups, manglede nogle felter:

tblBrugere består bl.a. af:
- bruger_id
- bruger_navn

tblPost består bl.a. af:
- post_id
- post_bruger (henvisning til bruger_id i tblBrugere)
Avatar billede bernhof Nybegynder
07. februar 2004 - 18:41 #2
Jeg havde forestillet mig noget i stil med:

SELECT TOP 5 bruger_id, bruger_navn, COUNT(post_id) AS PostAntal FROM tblBrugere INNER JOIN tblPost ON tblPost.salg_bruger = tblBrugere.bruger_id ORDER BY PostAntal DESC

Men den kommer med følgende fejlmedd.:

Microsoft JET Database Engine (0x80040E21)
You tried to execute a query that does not include the specified expression 'bruger_id' as part of an aggregate function.
Avatar billede bernhof Nybegynder
07. februar 2004 - 18:41 #3
Rettelse: tblPost.salg_bruger = tblPost.post_bruger
Avatar billede trer Nybegynder
08. februar 2004 - 02:05 #4
SELECT TOP 5 bruger_id, bruger_navn, COUNT(post_id) AS PostAntal FROM tblBrugere INNER JOIN tblPost ON tblPost.salg_bruger = tblBrugere.bruger_id
GROUP BY bruger_id, bruger_navn
ORDER BY PostAntal DESC
Avatar billede bernhof Nybegynder
08. februar 2004 - 13:52 #5
Sætningen virkede umiddelbart ikke, da den påstår, at den ikke kender "PostAntal". Men jeg prøvede at fjerne ORDER BY-delen, og så virkede den (dog uden at sortere efter antal poster).

Derefter prøvede jeg så at ændre PostAntal i ORDER BY-delen til COUNT(salg_id), og så virkede den efter hensigten. Men hvordan kan det være, at man ikke kan bruge det alias man har givet COUNT(salg_id) tidligere i sætningen?
Avatar billede bernhof Nybegynder
08. februar 2004 - 13:53 #6
Øv, rettelse igen: COUNT(salg_id) = COUNT(post_id)
Avatar billede trer Nybegynder
08. februar 2004 - 13:59 #7
Thja... sådan er det bare :-) Du kan kun angive originale kolonne navne - eller kolonne indeks i en order by og group by.

fx

select felt1, felt2 from tabel
order by 2

for at sortere efter anden output kolonne.
Avatar billede bernhof Nybegynder
08. februar 2004 - 14:05 #8
Ah, ok :) Well - hvis du lægger et svar, så kan jeg lukke spørgsmålet.
Avatar billede trer Nybegynder
08. februar 2004 - 14:41 #9
Ok, et svar :-)
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