Avatar billede claus_w Nybegynder
08. november 2001 - 19:24 Der er 4 kommentarer og
2 løsninger

Hjælp til query

Jeg har en tabel med persondata, her er et udsnidt:

ID | Køn | Værdi
1  | 2  | 1
2  | 2  | 3
3  | 1  | 2
4  | 2  | 4
5  | 1  | 3
6  | 1  | 1
7  | 1  | 1

Det jeg så gerne vil have min query til er at finde, er den procentdel af mænd (køn=1) samt den procentdel af kvinder (køn=2) som har en værdi på over 2.

Procentdelen findes således:
mænd: (mænd som har en værdi på over 2 / mænd i alt) * 100 = mænd i procent
(ligeledes for kvinder)

Udregningen vil så se således ud:
mænd = (1 / 4) * 100 = 25%
kvinder = (2 / 3) * 100 = 66,6%

output:
Mænd | Kvinder
25  | 66,6


Jeg har i lang tid forsøgt at lave en sql-query til dette men jeg kan virkeligt ikke gennemskue hvordan jeg laver denne i én query.

På forhånd tak for hjælpen.


Avatar billede goz Nybegynder
08. november 2001 - 21:50 #1
her er et forslag:
SELECT (select  count(*) from persondata where værdi>2 and køn=1)  / Count(*) AS resultat
FROM test
WHERE køn=1;

mvh goz
Avatar billede claus_w Nybegynder
08. november 2001 - 22:34 #2
goz: tak for svaret, det at du lavet en query inden i en query har hjulpet mig meget på vej.

Men det er egentligt temmelig vigtigt at resultatet for procentdelen af mænd og kvinder kommer ud i samme query som det output jeg illustrerede. Grunden til dette er at jeg skal bruge den samme query til andre typer data hvor de mulige værdier ikke kun er mand eller kvinde men op til 20-30 stk..
Avatar billede nih Novice
08. november 2001 - 22:56 #3
Prøv denne her:

SELECT distinct 100*(SELECT Count(Tabel2.Værdi) AS Antal    FROM Tabel2    WHERE (((Tabel2.Værdi)>2))    GROUP BY Tabel2.Køn    HAVING (((Tabel2.Køn)=1));)/DCount(\"[køn]\",\"tabel2\",\"[køn] = 1\") AS Mænd, 100*(SELECT Count(Tabel2.Værdi) AS Antal    FROM Tabel2    WHERE (((Tabel2.Værdi)>2))    GROUP BY Tabel2.Køn    HAVING (((Tabel2.Køn)=2));)/DCount(\"[køn]\",\"tabel2\",\"[køn] = 2 \") AS Kvinder
FROM Tabel2;

tabellen har jeg kaldt \'tabel2\'

Niels
Avatar billede nih Novice
08. november 2001 - 23:32 #4
Du kan også bruge DCount hele vejen:

SELECT 
100*DCount(\"[køn]\",\"tabel2\",\"[køn] = 1 and [værdi]>2 \")/DCount(\"[køn]\",\"tabel2\",\"[køn] = 1\") AS Mænd,
100 * DCount(\"[køn]\",\"tabel2\",\"[køn] = 2 and [værdi]>2 \")/DCount(\"[køn]\",\"tabel2\",\"[køn] = 2 \") AS Kvinder;

Niels
Avatar billede claus_w Nybegynder
08. november 2001 - 23:42 #5
okey, mange tak for hjælpen niels. Den første forstod jeg ikke så meget af men den næste er lidt mere overskuelig. Jeg har nu løst mit første problem, mange tak.

Måske kan du hjælpe mig med mit andet problem, det ligner meget det du har lavet nu. (skal nok sætte antallet af point op)

værdi beskriver om man er \"målgruppen\", og som det er nu finder jeg:
Den procentdel af mænd som er målgruppe.
men hvad hvis jeg vil finde:
Den procentdel af målgruppen der er mænd.

Det er lidt tricky og jeg kan ik rigtigt overskue den. Har du en idé til hvordan man gør dette?
Avatar billede nih Novice
09. november 2001 - 08:03 #6
SELECT 100*DCount(\"[køn]\",\"tabel2\",\"[køn] = 1 and [værdi]>2 \")/DCount(\"[køn]\",\"tabel2\",\"[køn] = 1\") AS Mænd, 100*DCount(\"[køn]\",\"tabel2\",\"[køn] = 2 and [værdi]>2 \")/DCount(\"[køn]\",\"tabel2\",\"[køn] = 2 \") AS Kvinder, 100*[mænd]/([mænd]+[kvinder]) AS procentM, 100*[kvinder]/([mænd]+[kvinder]) AS procentK;

Niels
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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