Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:31 Der er 14 kommentarer og
1 løsning

count(distinct(VAR)) for hver værdi i en anden kolonne

Jeg har en tabel:

Number1    Number2    Number3    Name
1          1          1          A
1          2          3          A
2          4          2          B
3          3          3          A
3          5          2          D
OSV

Jeg vil gerne lave en ny tabel hvor jeg tæller følgende op:
1) Hvor mange gange forekommer de forskellige værdier i 'Name'
2) Hvor mange gange forekommer de forskellige værdier i 'Name' med unikke numre i 'Number1'
3) Hvor mange gange forekommer de forskellige værdier i 'Name'
med unikke numre i 'Number2'

Håber der er nogen der kan hjælpe
Avatar billede arne_v Ekspert
10. februar 2014 - 20:38 #1
#1 maa vaere nem:

SELECT name,COUNT(*) FROM dintabel GROUP BY name
Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:41 #2
Jo, det var heller ikke den del af det der voldte mig problemer:-)
Avatar billede arne_v Ekspert
10. februar 2014 - 20:41 #3
Forslag til #2 aldeles utestet:

SELECT name,COUNT(number1)
FROM (SELECT number1,name,COUNT(*) FROM dintabel GROUP BY number1,name) x
GROUP BY name
Avatar billede arne_v Ekspert
10. februar 2014 - 20:42 #4
Og #3 maa vaere samme problem som #2 bare med et andet felt.
Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:43 #5
Egentlig skal det bruges i SAS (hvor man også kan bruge SQL). Har fundet ud af at lave det, men det endte med en ret uelegant løsning. Tænker at det kan gøres med en kort stump SQL.
Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:44 #6
Det var hurtigt. Prøver det lige.
Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:45 #7
Det er længe siden jeg har været herinde. Kommer til at skrive svar i stedet for kommentarer - sorry.
Avatar billede hcthorsen Praktikant
10. februar 2014 - 20:53 #8
Cool. Det ser ud til at virke. Kan du hjælpe en novice med hvordan man får flettet #3 ind? Jeg ville egentlig også gerne sortere efter en kolonne 'year', kan det lade sig gøre?
Avatar billede arne_v Ekspert
10. februar 2014 - 20:54 #9
svar
Avatar billede arne_v Ekspert
10. februar 2014 - 20:55 #10
#3 maa vaere den samme som #2 bare med number2 i.s.f. number1
Avatar billede arne_v Ekspert
10. februar 2014 - 20:56 #11
Skal der grupperes efter year?
Avatar billede hcthorsen Praktikant
10. februar 2014 - 21:04 #12
Ja, gruppering efter år. Ved nærmere eftersyn virker det ikke helt alligevel. Slutresultatet skal være:

YEAR    NAME    N    N_UNIK_NUMBER1    N_UNIK_NUMBER2   
2011    A        19    17                12
2011    B        1    1                  1
2011    D        10    5                  1
2012    A        7    7                  5
2012    E        3    3                  1

Jeg håber det giver mening...
Avatar billede arne_v Ekspert
10. februar 2014 - 21:08 #13
Hmm. Saa tror jeg at vi skal proeve noget andet.

Maaske:

SELECT year,name,COUNT(*) AS n,COUNT(DISTINCT number1) AS n_unik_number1,COUNT(DISTINCT number2) AS n_unik_number_2
FROM dintabel
GROUP BY year,name
ORDER BY year,name
Avatar billede hcthorsen Praktikant
10. februar 2014 - 21:37 #14
Hmmm, vi nærmer os, men det driller lidt. Har ikke mere tid i aften. Skriver i morgen. Tusind tak for hjælpen indtil nu...
Avatar billede hcthorsen Praktikant
10. februar 2014 - 22:39 #15
Jamen fantastisk. Det virker. Du er en stjerne - igen. De få linjer har lige erstattet 100 linjer SAS-kode. Tusind tak!
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