[SQL (informix)] COUNT probleempje

Pagina: 1
Acties:

  • Milmoor
  • Registratie: Januari 2000
  • Laatst online: 22:45

Milmoor

Footsteps and pictures.

Topicstarter
Ik heb wat ruzie met count en groepen. Even een simple voorbeeld:
code:
1
2
3
4
5
6
7
8
SELECT wijk.wijknaam wijk
     gebouwgegevens.gebouwnaam gebouw,
     COUNT(*) aantal,
     COUNT(wittedeur) aantalwit, --klopt niet
     COUNT(rodedeur) aantalrood  --klopt niet
WHERE wijk.gebouwnr = gebouwgegevens.gebouwnr
GROUP BY 1,2
ORDER BY 1,2

Dit voorbeeld hoort op te leveren een lijst van gebouwen, gegroepeerd per wijk, met bij elk gebouw het aantal witte deuren en rode deuren. Dit werkt natuurlijk niet, maar hoe doe ik dit wel?

Rekeningrijden is onvermijdelijk, uitstel is struisvogelpolitiek.


Verwijderd

waarkomen de witte- en rode-deur vandaan? (hoe ziet je db layout er uit)

gebruik iets van: SUM(wittedeur) en SUM(rodedeur) :?

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 14-09 13:24
Geen SUM gebruiken, je gaat deuren TELLEN niet OPTELLEN. COUNT dus. eehm, heb je een lijstje met de velden en types?

"If you don't know where you are going, any road will take you there"


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Misschien is het handig om de output te geven?

Zodat we kunnen zien wat er fout is...

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Waarschijnlijk wil je een count per soort deur doen :?
Je wil dus selecteren op deursoort, dus in je where.
Zul je dus meerdere statements nodig hebben.

Ideetje hoe ik dit getruukt in oracle zou doen:
sum(decode(deursoort, 'wittedeur',1,0)) wittedeuren
, sum(decode(deursoort, 'rodedeur',1,0)) rodedeuren

Geen idee of je dit soort truukjes ook in Informix kunt doen.

Who is John Galt?


  • Milmoor
  • Registratie: Januari 2000
  • Laatst online: 22:45

Milmoor

Footsteps and pictures.

Topicstarter
De db layout willen jullie helemaal niet weten. Het betreft een database van een woningbouwvereniging. De documentatie is zeer beperkt en de database is dat niet.
Het voorbeeld is uit de duim gezogen, met een bijpassende db layout. Ik loop vast in mijn kennis van SQL. Ik zoek eigenlijk een soort COUNTIF. Helaas bestaat die niet of heet deze functie zo erg anders dat ik hem niet herken. Hieronder een herschreven voorbeeld van wat ik bedoel.
code:
1
2
3
4
5
6
7
8
SELECT wijk.wijknaam wijk
       gebouwgegevens.gebouwnaam gebouw,
       COUNT(*) aantal,
       COUNTIF(gebouwgegevens.deurtype = "wit") aantalwit,
       COUNTIF(gebouwgegevens.deurtype = "rood") aantalrood
WHERE wijk.gebouwnr = gebouwgegevens.gebouwnr
GROUP BY 1,2
ORDER BY 1,2

Een mogelijke db layout:
code:
1
2
3
4
5
6
7
8
9
10
11
tabel wijk:
 gebouwnr: INTEGER
 wijknaam: CHAR[30]

tabel gebouwgegevens:
 gebouwnr: INTEGER
 gebouwnaam: CHAR[30]
 deurtype: CHAR[30]
 raamtype: CHAR[30]
 verdiepingen: INTEGER
 etc.

Rekeningrijden is onvermijdelijk, uitstel is struisvogelpolitiek.


Verwijderd

Misschien zoiets proberen:
code:
1
2
3
4
5
6
7
8
9
SELECT wijk.wijknaam wijk
     gebouwgegevens.gebouwnaam gebouw,
     COUNT(*) aantal,
     (SELECT count(*) FROM gebouwgegevens1 
WHERE wijk.gebouwnr = gebouwgegevens1.gebouwnr and gebouwgegevens1.deurtype = "wit") aantalwit,
     ...
WHERE wijk.gebouwnr = gebouwgegevens.gebouwnr
GROUP BY 1,2
ORDER BY 1,2

  • Milmoor
  • Registratie: Januari 2000
  • Laatst online: 22:45

Milmoor

Footsteps and pictures.

Topicstarter
Goed idee om het via een subquery op te lossen. Het heeft wel de potentie de boel ongelofelijk te vertragen. Het moet dus wel een correlated subquery zijn. Helaas geeft dit in eerste instantie een syntax error. Blijkbaar zie ik nog wat over het hoofd.

Rekeningrijden is onvermijdelijk, uitstel is struisvogelpolitiek.

Pagina: 1