Avatar billede elprebsi Praktikant
14. maj 2008 - 13:28 Der er 5 kommentarer og
1 løsning

Dobbelt count på relationstabel

Hej,

Jeg har en tabel, der er en implementering af en n:m relation (kunde_interesser). Den har 2 fremmed nøgler: cpr_nr og interesse_id.

Med nedenstående SQL kan jeg tælle, hvor mange interesser hvert enkelt cpr_nr har registreret.

select cpr_nr, count(*) as antal
from kunde_interesser
group by cpr_nr

Fx.
cpr_nr      antal
------------------
1234567890      12
2345678901      5
...

Mit spørgsmål er nu: Hvordan kan jeg med SQL lave en liste, hvor jeg finder ud af, hvor mange cpr numre, der har registreret 1, 2, 3 osv. interesser, som fx:

Antal interesser    Antal kunder
--------------------------------
              1            805
              2              22
              3              75
              4            1024

På forhånd tak
Prebsi
Avatar billede Syska Mester
14. maj 2008 - 16:22 #1
n:m ... det er 1 til mange ik' ?

Det du har her virker som mellem table mellem interresser og kunder ? antså en m:m ... eller tager jeg fejl ?
Avatar billede Syska Mester
14. maj 2008 - 16:38 #2
Uden at lige kunne gennemskue dit design 100% ... så kan jeg gøre sådan her på min 1 til mange relation, for at se hvor mange brugere der har sammen antal Maps.

SELECT COUNT(*) Antal, Maps FROM
(SELECT U.UserID, COUNT(MapListID) AS Maps FROM Users U
LEFT JOIN MapLists ML ON U.UserID = ML.UserID
GROUP BY U.UserID) AS t1 GROUP BY Maps
Avatar billede elprebsi Praktikant
15. maj 2008 - 08:29 #3
Hej Buzzzz,

Det var lige den konstruktion, jeg skulle bruge. Tak for hjælpen. Drop et svar, så lukker vi sagen.
Avatar billede Syska Mester
15. maj 2008 - 09:28 #4
svar :-)

Sad også lige i starten og tænkte ... det burde være lige til, men den tog lidt længere tid at løse end jeg havde regnet med ...

Om den måske kan laves så den er endnu hurtigere hvis man har sygt mange rows, skal jeg ikke kunne sige ...
Avatar billede elprebsi Praktikant
15. maj 2008 - 09:41 #5
Jeg har ca. 10½ mio rækker i min tabel, og det tog ca. 20 sek. Så det må siges at være OK.
Avatar billede Syska Mester
15. maj 2008 - 09:59 #6
20 sek virker som meget lang tid ... sikker på du har rigtige indexes på din table ?

// ouT
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