id vare
1 v5
2 v4
3 v4
2 v5
4 v2
4 v3
2 v4
2 v5
1 v5
2 v3
4 v4
4 v2
2 v5
3 v4
Her har
id 1 kjøpt 2 forskjellige varer
id 2 kjøpt 3 forskjellige varer (ved 6 anledninger)
id 3 kjøpt 1 vare
id 4 kjøpt 3 forskjellig varer (ved 4 anledninger)
Således har jeg 2 kunder (50% :-) ) som kjøper 3 varer og en med 2 varer
og en med en vare.
Jeg ønsker altså distribusjonen av antall distinkte varer per ID. Ikke
antall varer eller antall ganger id forekommer per vare e.l.
Da databasen inneholder mellom 5 og 6 millioner records, så det er ikke
håndtellejobb.
Det er ca 100 ulike varer, så jeg har lurt på å startet med vare én og
gå oppover, men med inntil ca 6 varer på maks blir det vel 100^6
kombinasjoner å beregne? Det er noen hundre tusen ID.
Finnes det noen smart løsning?
For ordens skyld, det dreier seg ikke om butikk (med hundretusener av
kunder), men synes analogien forenkler forklaringen.
Pål
Dataene er faktisk 2 kunder med 3 varer, og 2 kunder med 2 varer. :)
> Jeg ønsker altså distribusjonen av antall distinkte varer per ID. Ikke
> antall varer eller antall ganger id forekommer per vare e.l.
Det virker vel helt greitt med en liten:
select id, count(distinct(vare)) from handel group by id;
Det gir i alle fall forventet resultat i postgresql. :)
-Harald
--
Harald Nordgård-Hansen
Det ser ut som det løste mye. Skal sjekke resultatene - fikk drøyt
144000 linjer i output. Nå står det bare igjen å gjøre
frekvensfordelingen (hvor mange med 1 vare osv).
Takk
Pål
Hmm. Nå slettet jeg tabellen, så jeg får ikke verifisert om det kommer
ut riktige data, men noe i retning av:
select numv,count(id)
from (select id, count(distinct(vare)) as numv
from handel group by id) AS freq
group by numv;
burde gjøre jobben.
-Harald
--
Harald Nordgård-Hansen
Takk for hjelpen så langt
Pål