Avatar billede heyde Nybegynder
15. september 2004 - 23:52 Der er 3 kommentarer og
1 løsning

Kompliceret udtræk fra database

Hej,
Jeg skal hive noget data ud fra de tabeller I kan se nedenunder. Idéen er at lave statistik over hvor mange procent af brugerne på siden, der har nogle bestemte interesser, men SQL'en er ved at være lidt for kompliceret til mig. Håber der er nogle kloge hoveder derude :)

ClubInterest inderholder information om interesserne (navn + id), og personInterest er en mange-til-mange tabel mellem person og clubInterest.
Det er ekstra kompliceret, da det ikke er alle brugere der har valgt interesser, og jeg vil kun finde dem der har valgt interesser...

Dvs. at jeg gerne vil kunne printe noget lignende det her:
Der er 302 brugere der har valgt interesser
- Fodbold: 35%
- Floorball: 23%
- Ishockey: 67%
- Curling: 3%

Her er tabellerne:
tabelnavn: person
- personID
- (indeholder også en masse andre tabeller, som ikke bruges i denne forespørgsel)

tabelnavn: clubInterest
- interestID
- navn

tabelnavn: personInterest
- interestID
- personID

Jeg vil være meget glad for enhver hjælp!
Avatar billede eagleeye Praktikant
16. september 2004 - 00:15 #1
Du kan gøre sådan her:

sql = "SELECT clubInterest.navn, (Count(personInterest.personID)/(select count(*) from person)*100) AS antal FROM clubInterest LEFT JOIN personInterest ON clubInterest.interestID = personInterest.interestID GROUP BY clubInterest.navn;"

Set rs=Conn.Execute(sql)
do while not rs.EOF
  Response.write "-" & rs("navn") & ": " & Round(rs("antal")) & "%<br>"
  rs.Movenext
loop
Avatar billede eagleeye Praktikant
16. september 2004 - 00:17 #2
og vil du sortere efter hjøste antal kan det gøres ved at rette SQL sætningen:

sql = "SELECT clubInterest.navn, (Count(personInterest.personID)/(select count(*) from person)*100) AS antal FROM clubInterest LEFT JOIN personInterest ON clubInterest.interestID = personInterest.interestID GROUP BY clubInterest.navn ORDER BY Count(personInterest.personID) DESC;"


det virker med access.
Avatar billede heyde Nybegynder
16. september 2004 - 09:32 #3
Jeg har fundet frem til nedenstående løsning i stedet for, som gør præcis hvad jeg vil have den til. Du skal have mange tak for hjælpen!
Avatar billede heyde Nybegynder
16. september 2004 - 09:33 #4
select name, 100.0 * (select count(distinct personid) from personInterest pi where pi.interestID = ci.interestID)/(select count(distinct personID) from personInterest
) procent, (select COUNT(DISTINCT p.personID) FROM person p, personInterest pi WHERE p.personID = pi.personID) users from clubInterest ci
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