PDA

Bekijk Volledige Versie : [SQL] sql count vraag?



Joop
20/11/03, 10:00
Goedemorgen,

Ik heb een tabel:

id ouder kind

Deze tabel is gevuld:

1 persoon1 kind1
2 persoon1 kind2
3 persoon1 kind3
4 persoon2 kind4
5 persoon2 kind5
6 persoon3 kind6
7 persoon4 kind7

Is het mogelijk om met 1 sql het volgende resultaat te krijgen:

persoon1 heeft 3 kinderen
persoon2 heeft 2 kinderen
persoon3 heeft 1 kinderen
persoon4 heeft 1 kinderen

Wat ik nu doe is:
select * from tabel

En vervolgens loop ik in code door de resultaatset en tel
programmatisch de kinderen. Alleen word m'n tabel nu erg groot en word
de resultaatset dus ook erg groot.

PS: ik kan helaas niet de tabel structuur veranderen, deze staat
namelijk vast.
PS2: het gaat hier om een mysql database, die nog geen subselects
ondersteund. (volgens mij versie 3.x)

Heeft iemand de gouden tip voor mij?

Alvast bedankt,


joop

Rene Pijlman
20/11/03, 10:15
Joop:
>Ik heb een tabel:
>
>id ouder kind
>
>Deze tabel is gevuld:
>
>1 persoon1 kind1
>2 persoon1 kind2
>3 persoon1 kind3
>4 persoon2 kind4
>5 persoon2 kind5
>6 persoon3 kind6
>7 persoon4 kind7
>
>Is het mogelijk om met 1 sql het volgende resultaat te krijgen:
>
>persoon1 heeft 3 kinderen
>persoon2 heeft 2 kinderen
>persoon3 heeft 1 kinderen
>persoon4 heeft 1 kinderen

select ouder, count(kind)
from tabel
group by ouder

Getest met PostgreSQL.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

jAnO!
20/11/03, 10:45
"Joop" <joop@ikbennietjoop.com> wrote in message
news:lkvorvsdcdpjjjskmod74c0se46ka7cl6d@4ax.com...
> Goedemorgen,
>
> Ik heb een tabel:
>
> id ouder kind
>
> Deze tabel is gevuld:
>
> 1 persoon1 kind1
> 2 persoon1 kind2
> 3 persoon1 kind3
> 4 persoon2 kind4
> 5 persoon2 kind5
> 6 persoon3 kind6
> 7 persoon4 kind7
>
> Is het mogelijk om met 1 sql het volgende resultaat te krijgen:
>
> persoon1 heeft 3 kinderen
> persoon2 heeft 2 kinderen
> persoon3 heeft 1 kinderen
> persoon4 heeft 1 kinderen
>
select ouder, count(kind)
from tabel group by ouder;

Joop
20/11/03, 11:15
On Thu, 20 Nov 2003 10:02:00 +0100, Rene Pijlman
<reply.in.the.newsgroup@my.address.is.invalid> wrote:

>Joop:
>>Ik heb een tabel:
>>
>>id ouder kind
>>
>>Deze tabel is gevuld:
>>
>>1 persoon1 kind1
>>2 persoon1 kind2
>>3 persoon1 kind3
>>4 persoon2 kind4
>>5 persoon2 kind5
>>6 persoon3 kind6
>>7 persoon4 kind7
>>
>>Is het mogelijk om met 1 sql het volgende resultaat te krijgen:
>>
>>persoon1 heeft 3 kinderen
>>persoon2 heeft 2 kinderen
>>persoon3 heeft 1 kinderen
>>persoon4 heeft 1 kinderen
>
> select ouder, count(kind)
> from tabel
> group by ouder
>
>Getest met PostgreSQL.

Dank je Rene en jAnO!, het werkt helemaal. Eigenlijk stom dat ik daar
niet op gekomen was :-)



joop

jAnO!
20/11/03, 11:15
"jAnO!" <j.groot@donotspam.kpn.com> wrote in message
news:bpi1g6$jbc$1@hdxl22.telecom.ptt.nl...
>
> "Joop" <joop@ikbennietjoop.com> wrote in message
> news:lkvorvsdcdpjjjskmod74c0se46ka7cl6d@4ax.com...
> > Goedemorgen,
> >
> > Ik heb een tabel:
> >
> > id ouder kind
> >
> > Deze tabel is gevuld:
> >
> > 1 persoon1 kind1
> > 2 persoon1 kind2
> > 3 persoon1 kind3
> > 4 persoon2 kind4
> > 5 persoon2 kind5
> > 6 persoon3 kind6
> > 7 persoon4 kind7
> >
> > Is het mogelijk om met 1 sql het volgende resultaat te krijgen:
> >
> > persoon1 heeft 3 kinderen
> > persoon2 heeft 2 kinderen
> > persoon3 heeft 1 kinderen
> > persoon4 heeft 1 kinderen
> >
> select ouder, count(kind)
> from tabel group by ouder;
>

beter nog:

select ouder, ' heeft '|| count(kind) ||' kinderen'
from tabel
group by ouder;

>

Sjoerd Schreuder
20/11/03, 11:15
"jAnO!" wrote:
>
> "jAnO!" <j.groot@donotspam.kpn.com> wrote in message
> news:bpi1g6$jbc$1@hdxl22.telecom.ptt.nl...
> >
> > "Joop" <joop@ikbennietjoop.com> wrote in message
> > news:lkvorvsdcdpjjjskmod74c0se46ka7cl6d@4ax.com...
> > > Goedemorgen,
> > >
> > > Ik heb een tabel:
> > >
> > > id ouder kind
> > >
> > > Deze tabel is gevuld:
> > >
> > > 1 persoon1 kind1
> > > 2 persoon1 kind2
> > > 3 persoon1 kind3
> > > 4 persoon2 kind4
> > > 5 persoon2 kind5
> > > 6 persoon3 kind6
> > > 7 persoon4 kind7
> > >
> > > Is het mogelijk om met 1 sql het volgende resultaat te krijgen:
> > >
> > > persoon1 heeft 3 kinderen
> > > persoon2 heeft 2 kinderen
> > > persoon3 heeft 1 kinderen
> > > persoon4 heeft 1 kinderen
> > >
> > select ouder, count(kind)
> > from tabel group by ouder;
> >
>
> beter nog:
>
> select ouder, ' heeft '|| count(kind) ||' kinderen'
> from tabel
> group by ouder;

select ouder || ' heeft ' || aantal || ' kinderen' as resultaat from
(select ouder, count(kind) as aantal
from tabel
group by ouder
);

De query ziet er ook gelijk een stuk lastiger uit. ;-)

Sjoerd Schreuder