Toon posts:

[SQL] Count vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem:

Ik heb 2 types: A en B
Via een sql query wil ik het aantal records waar type A in voorkomt minus het aantal records waar type B in voorkomt.

Dus:

Tabel AAP

ID Name Type
--------------------
1 Dit A
2 Is A
3 Een B
4 Test A
5 Enz A
6 Etc B

Het resultaat van mijn query is dus 2 (type A = 4) - (type B = 2) = 2

Bedankt !!

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:04
Dit is gewoon stiekem manual werk. Zoek zelf eens ipv te vragen of anderen het voor jou willen oplossen, want zo komt het wel over.

Zoek eens in de manual bij COUNT. Hiermee kun je de records alvast gaan tellen. Kijk ook eens naar self-joins. En je kan ook een '-' operator gebruiken in uw select-clause.

https://fgheysels.github.io/


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

code:
1
2
3
4
5
6
SELECT COUNT(ID) WHERE ID IN
(
   SELECT ID FROM AAP WHERE Type="A"
   MINUS 
   SELECT ID FROM AAP Where Type="B" 
)

Siditamentis astuentis pactum.


  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Waarom niet gewoon :
code:
1
2
3
SELECT COUNT(ID)
FROM AAP
WHERE TYPE = 'A'

Hier heb je helemaal geen sub selects voor nodig.

Verwijderd

Op dinsdag 11 juni 2002 18:55 schreef goalgetter het volgende:
Waarom niet gewoon :
code:
1
2
3
SELECT COUNT(ID)
FROM AAP
WHERE TYPE = 'A'

Hier heb je helemaal geen sub selects voor nodig.
wedden van wel... waar wilde jij in jouw query het aantal type B eraf halen?!

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Zal ik dan maar weer:
Doe het niet met een count maar met een sum. tel op: Als type = A dan 1 a;s type = 'B' dan -1.
dus in Oracle:
code:
1
2
SELECT sum(decode(type,'A',1,'B,-1))
FROM   tabel

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 17:41 schreef whoami het volgende:
Dit is gewoon stiekem manual werk. Zoek zelf eens ipv te vragen of anderen het voor jou willen oplossen, want zo komt het wel over.
:? :?
Dit is dus niet het geval.

Bedankt Varienaja en Goodielover, hier kan ik wat mee.
Beide oplossingen werken.

Kleine aanpassing op oplossing 1:
code:
1
2
3
4
5
6
7
select id from AAP
where id in
(
    (select count(id) from AAP where data="A")
    -
    (select count(id) from AAP where data="B")
)

Oplossing 2 omgegooid naar SQL7:
code:
1
select sum (case Data when "A" then 1 when "B" then -1 end) from AAP

Nogmaals bedankt.

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Op dinsdag 11 juni 2002 20:02 schreef zellufs het volgende:

[..]

wedden van wel... waar wilde jij in jouw query het aantal type B eraf halen?!
Dan voeg je er toch lekker een
code:
1
AND type != B

aan toe? Als je subselects wil gebruiken ga je gang. Maar volgens zijn specs heeft ie maar 2 types, en dan hoef je natuurlijk alleen maar te zeggen welke je wil hebben.

edit:
Ok, ik lees even scheef. Ik d8 dat ie gewoon het totaal aantal type A wilde hebben |:(

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:04
Zonder gebruik te maken van subqueries:
code:
1
2
3
4
5
SELECT COUNT(t1.veld) - COUNT(t2.veld)
FROM tabel t1, tabel t2
WHERE t1.id = t2.id
AND t1.veld = 'A'
AND t2.veld = 'B'

https://fgheysels.github.io/


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op woensdag 12 juni 2002 08:42 schreef whoami het volgende:
Zonder gebruik te maken van subqueries:
code:
1
2
3
4
5
SELECT COUNT(t1.veld) - COUNT(t2.veld)
FROM tabel t1, tabel t2
WHERE t1.id = t2.id
AND t1.veld = 'A'
AND t2.veld = 'B'
Ik vind dit geen slimme oplossing.
Deze oplossing gaat niet werken. Dit zou suggereren dat een record met een bepaalde ID zowel type A als B zou zijn.
Ik denk dat dit nul gaat opleveren

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:04
Ik had het ook niet getest, maar ik zal even mijn middagpauze opofferen...

Goodielover heeft gelijk.

https://fgheysels.github.io/


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op woensdag 12 juni 2002 12:10 schreef whoami het volgende:
Ik had het ook niet getest, maar ik zal even mijn middagpauze opofferen...

Goodielover heeft gelijk.
Ik hoop dat je het niet gedaan hebt, want hij heeft de oplossing toch al?

[aro mode]en natuurlijk heb ik gelijk[/aro mode]
Pagina: 1