Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

meerdere counts in 1 sql query

Pagina: 1
Acties:
  • 330 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een SQL probleem en kan maar niet tot een oplossing komen.
Het zit alsvolgt: Ik heb één tabel en daarin worden NAW gegevens opgeslagen, maar ook andere dingen. Onder ander de datum wanneer iemand een informatie pakket heeft aangevragen.
Wat ik nu zou willen is een query die een count maakt van het aantal keer dat een informatiepakket is aangevragen per provincie.
Ik zal proberen een beeld te schetsen..
Voorbeeld van hoe de tabel eruit zou kunnen zien
code:
1
2
3
4
5
|--ZipCode--|------Info------|
| 5245 AS  | 10/10/2005|
| 1056 RD  |                 |
| 5578 ED  | 13/04/2007|
| 9594 TR  | 12/05/2006|


Tabel die ik zou willen krijgen uit de query
code:
1
2
3
4
|--Provincie--|--AantalInfo--|
| N-Brabant |        2         |
| N-Holland |        0         |
| Groningen|         1         |


Ik krijg het natuurlijk wel voor 1 provincie voor elkaar:
code:
1
2
3
select count(Info) as AantalInfo
from tabel
where ZipCode between '1000' and '2158'

ik kan maar niks bedenken hoe ik hieruit kan komen, heeft iemand een suggestie? of een idee in welke richting ik moet denken?

Alle hulp is welkom :D

[ Voor 1% gewijzigd door Verwijderd op 05-12-2007 16:01 . Reden: Code tags toegevoegd ]


  • Nic
  • Registratie: April 2005
  • Laatst online: 29-11 21:25

Nic

Vrij

Je zou een tabel moeten hebben die postcodes aan provincies koppelt, dat zou het een stuk makkelijker maken.
Als je kunt volstaan met een grove gebiedsindeling, dan kun je zoiets doen:
code:
1
select count(*) as aantal, left(zipcode,1)+'000' as postcode from tblBla group by left(zipcode,1)


Ik weet niet met wat voor database je werkt, afhankelijk daarvan zou je misschien iets anders moeten verzinnen voor left(). MS SQL server kan wel left, in ieder geval.

Van de gebiedsindeling per postcode-duizendtallen staat hier een mooi kaartje:
http://nl.wikipedia.org/w...an_postcodes_in_Nederland

Als je echt provincies zou willen tellen, dan zou je dat met een user defined functie kunnen doen (in MS SQL server in ieder geval, de mogelijkheden van mysql ken ik niet), die de provincie teruggeeft voor een postcode, het principe van 'group by' is daarna hetzelfde. Het zal dan overigens niet echt performen als je een tabel hebt van miljoenen records, in dat geval kun je beter de provincie (nog beter: het provincie-id) opslaan in je records.

[ Voor 26% gewijzigd door Nic op 05-12-2007 16:22 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 27-11 10:04

André

Analytics dude

Move naar Programming

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Dit los je inderdaad heel simpel op met een group by, daar is ie voor gemaakt.

Het probleem dat je hebt is dat je postcodes in je tabel hebt staan en een niet-bestaande entiteit "provincie" gaat introduceren.

Zoals dsltv zegt: je zult ergens die link vast moeten leggen tussen postcodes en provincies.

Ik lees net op wikipedia dat die indeling sowieso niet nauwkeurig kan gebeuren, maar altijd een benadering is.

[ Voor 15% gewijzigd door Dido op 06-12-2007 08:43 ]

Wat betekent mijn avatar?


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
Verwijderd schreef op woensdag 05 december 2007 @ 14:25:
Ik zit met een SQL probleem...

* knip *
Je zou ook gebruik kunnen maken van een temp table. Deze kan je vullen door verschillende counts uit te voeren, en deze daarna in de table te zetten (Insert Into of Select Into).

De Group By is ook een optie. Hiermee groepeer je je count op postcode. Zou je ook voor kunnen kiezen.
[Edit]: Te laat... Dido was me voor :P

Hier zou ik eventueel bij kunnen helpen, maar dan hoor ik het wel. Post hier maar, of mail/PM me ;)

[ Voor 14% gewijzigd door Acid__Burn op 06-12-2007 08:42 ]


  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 11:21
Volgens mij is dit niet te doen zolang je je postcodes niet aan provincies kunt koppelen, of zie ik dat nu verkeerd? Op postcode groeperen kan prima maar je mist je provincie entiteit gewoon.

Verwijderd

Dus een tabel in je database waarbij postcode aan provincie is gekoppeld en dan joinen.

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

Verwijderd schreef op donderdag 06 december 2007 @ 10:14:
Dus een tabel in je database waarbij postcode aan provincie is gekoppeld en dan joinen.
En daarna groupen per provincie natuurlijk.

openkat.nl al gezien?


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

killercow schreef op donderdag 06 december 2007 @ 11:16:
En daarna groupen per provincie natuurlijk.
Dat is het makkelijke stuk, denk ik. Ik begrijp namelijk van wikipedia dat er geen echt eenduidig verband tussen postcode en provincie is :P

Wat betekent mijn avatar?


Verwijderd

Topicstarter
er bestaat een tabel in de database met provincie indelingen en postcodes die hierbij horen. inderdaad group by dat was ik al helemaal vergeten dat die ook bestond :-D, ach soms slaap je wel is in de college zaal..
Ik ga hiermee aan de slag en kijk of ik eruit kom.. zoniet dan weet ik jullie te vinden, bedankt voor de snelle en goede hulp!

trouwens zal meteen een vraag stellen waar ik toch tegen aan ga lopen vnv..
in die postcode tabel staat het als volgt:
beginPC | eindPC | Provincie
1000 | 2149 | Noord Holland

maar hoe kan ik een join maken die kijkt of de postcode van de ene tabel tussen de twee waardes van die postcode tabel ligt?

[ Voor 31% gewijzigd door Verwijderd op 06-12-2007 14:24 ]


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Dit lijkt me smerig, maar zou kunnen werken?
SQL:
1
2
3
4
SELECT b.provincie, count(*)
  FROM tabel1 a
  JOIN pctabel b on a.PC >= b.beginPC and a.PC <= b.eindPC
 GROUP BY b.provincie

Wat betekent mijn avatar?


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23:42
Zo grof is de indeling niet. Een 4-cijferige postcode hoort maar bij 1 gemeente, en 1 gemeente hoort maar bij 1 provincie. Een provincie kan dus uit meer dan 1 postcode-reeks bestaan, maar het is niet diffuus of niet te bepalen!

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Bolukan schreef op donderdag 06 december 2007 @ 14:57:
Zo grof is de indeling niet. Een 4-cijferige postcode hoort maar bij 1 gemeente, en 1 gemeente hoort maar bij 1 provincie. Een provincie kan dus uit meer dan 1 postcode-reeks bestaan, maar het is niet diffuus of niet te bepalen!
Maar dan met je per postcode een record hebben. Dat heeft de TS niet.
Ik haal mijn info ook maar van wikipedia af, maar daar begrijp ik uit dat de tabel zoals de TS hanteert niet 100% waterdicht is.
Ik betwijfel trouwens ten zeerste of dat van belang is :P

[ Voor 5% gewijzigd door Dido op 06-12-2007 15:01 ]

Wat betekent mijn avatar?


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23:42
Dido schreef op donderdag 06 december 2007 @ 15:01:
[...]

Maar dan met je per postcode een record hebben. Dat heeft de TS niet.
Niet per postcode, maar per range. We hebben toch 12 provincies (had aardrijkskunde niet als examenvak), laat je dan met 15 a 17 ranges alles kunnen beschrijven....

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Weet je, lees het zelf even door. Ik heb het ook maar van die pagina af, en hem even opzoeken is verduveld lastig:
http://nl.wikipedia.org/w...d#Postcodes_en_provincies
De logica van postcodes volgt lang niet altijd de provinciegrenzen. Vandaar dat er slechts een grove indeling gemaakt kan worden.
Vervolgens heb je 15 ranges, waarvan 2 stuks:
• Het rivierengebied bij Zuid-Holland, Noord-Brabant en Gelderland
• Gebied bij het IJsselmeer (Gelderland, Overijssel, Drente en Flevoland)

[ Voor 21% gewijzigd door Dido op 06-12-2007 18:28 ]

Wat betekent mijn avatar?


Verwijderd

Topicstarter
zo nou komt het niet met de postcodes.. haha ben meer geïnteresseerd in een sql oplossing ;)

Ik ga de oplossing van dido zo even proberen, i'll report back to you guys..

oplossing lijkt te werken, echter gewoon join kan ik niet gebruiken voor deze query in ms access. ik heb een left join gepakt, is dat correct?

[ Voor 29% gewijzigd door Verwijderd op 06-12-2007 18:52 ]


  • SinergyX
  • Registratie: November 2001
  • Laatst online: 10:50

SinergyX

____(>^^(>0o)>____

Mischien een veld toevoegen waarin je vooraf direct de provincie erbij zet? een count/join erop en je zit een stuk makkelijker.

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 00:33

Freee!!

Trotse papa van Toon en Len!

Dido schreef op donderdag 06 december 2007 @ 18:27:
Weet je, lees het zelf even door. Ik heb het ook maar van die pagina af, en hem even opzoeken is verduveld lastig:
http://nl.wikipedia.org/w...d#Postcodes_en_provincies

[...]

Vervolgens heb je 15 ranges, waarvan 2 stuks:
• Het rivierengebied bij Zuid-Holland, Noord-Brabant en Gelderland
• Gebied bij het IJsselmeer (Gelderland, Overijssel, Drente en Flevoland)
Dat is inderdaad een probleem als je met ranges van postcodes werkt.
Bolukan schreef op donderdag 06 december 2007 @ 14:57:
Zo grof is de indeling niet. Een 4-cijferige postcode hoort maar bij 1 gemeente, en 1 gemeente hoort maar bij 1 provincie.
Bovenstaande is volledig correct (net een tijdje gewerkt met de problemen die volgen uit gemeentelijke herindelingen :( (naast wat andere database corruptie)).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Maar mijn twijfel was gegrond, dus komt het inderdaad niet aan op de preciese indeling van die postcodes.

Wat betekent mijn avatar?


Verwijderd

Topicstarter
en een left join is de correcte?

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Ik mag hopen dat een gewone inner join het moet doen (als in: je hebt geen postcodes die niet in ranges voorkomen in je PC-tabel). Waarom dan een (left) outer join gebruiken?

Wat betekent mijn avatar?


Verwijderd

Topicstarter
omdat er soms vergeten is een postcode in te vullen

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Dan kun je een left outer join gebruiken, inderdaad. Tel je ook meteen hoevaak iemand geen PC heeft ingevuld :)

Wat betekent mijn avatar?


Verwijderd

Topicstarter
bedankt voor de hulp man! werkt perfect zo

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

En weer verlaat een tevreden klant het pand :D

Wat betekent mijn avatar?


Verwijderd

Topicstarter
verlaten doe ik niet.. top forum!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23:42
Hmm, wilde voor "het archief" nog even de ranges vastleggen. Mbv CBS-data heb ik krap 90% van de circa 2450 plaatsnamen van een provincie voorzien. Het zijn minimaal 97 ranges om op basis van de postcode de provincie te bepalen. Dus veel meer dan 15.

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Ik durf het haast niet te zeggen, maar had wikipedia toch gelijk :D

offtopic:
Ik wordt soms gallisch van de knee-jerk reactie jegens iedere wikipedia-link dat "wikipedia niet betrouwbaar is als bron omdat iedereen het kan editten". Is net zo'n fenomeen als bij elke foto roepen dat het een photoshop is. Verder weinig relevant voor dit topic. Nothing to see. Please move on. :P

Wat betekent mijn avatar?


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23:42
Met dank aan CBS in combinatie met een stukje huisvlijt:

Edit: met postbussen, zie opmerking hieronder
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
1000   1277   NH.
1300   1361   Fle.
1380   1383   NH.
1390   1393   U.
1394   1394   NH.
1396   1396   U.
1398   1424   NH.
1426   1427   U.
1428   1428   ZH.
1430   2158   NH.
2159   2163   ZH.
2165   2165   NH.
2170   3381   ZH.
3400   3464   U.
3465   3466   ZH.
3467   3621   U.
3625   3625   NH.
3626   3648   U.
3651   3653   ZH.
3700   3769   U.
3770   3785   Gld.
3790   3791   U.
3792   3794   Gld.
3800   3836   U.
3840   3888   Gld.
3890   3899   Fle.
3900   3922   U.
3925   3925   Gld.
3927   3999   U.
4000   4119   Gld.
4120   4124   U.
4126   4128   ZH.
4130   4133   U.
4140   4145   ZH.
4147   4161   Gld.
4163   4163   ZH.
4170   4197   Gld.
4200   4209   ZH.
4211   4212   Gld.
4213   4213   ZH.
4214   4214   Gld.
4220   4247   ZH.
4250   4288   NB.
4300   4589   Z.
4600   4671   NB.
4675   4675   Z.
4680   4681   NB.
4690   4698   Z.
4700   5298   NB.
5300   5335   Gld.
5340   5764   NB.
5766   5817   L.
5820   5846   NB.
5850   6019   L.
6020   6029   NB.
6030   6471   L.
6500   6582   Gld.
6584   6599   L.
6600   7399   Gld.
7400   7437   O.
7439   7439   Gld.
7440   7702   O.
7705   7705   D.
7707   7739   O.
7740   7766   D.
7770   7798   O.
7800   7944   D.
7946   7946   O.
7948   7949   D.
7950   7955   O.
7957   7991   D.
8000   8045   O.
8050   8052   Gld.
8055   8066   O.
8070   8097   Gld.
8100   8154   O.
8160   8194   Gld.
8196   8198   O.
8200   8256   Fle.
8260   8294   O.
8300   8322   Fle.
8325   8347   O.
8351   8351   D.
8355   8378   O.
8380   8387   D.
8388   8435   F.
8437   8439   D.
8440   9299   F.
9300   9343   D.
9350   9367   Gr.
9400   9475   D.
9479   9479   Gr.
9480   9497   D.
9500   9503   Gr.
9510   9537   D.
9540   9563   Gr.
9564   9564   D.
9566   9566   Gr.
9570   9574   D.
9580   9651   Gr.
9654   9659   D.
9660   9747   Gr.
9749   9749   D.
9750   9756   Gr.
9760   9766   D.
9770   9845   Gr.
9850   9853   F.
9860   9866   Gr.
9870   9873   F.
9880   9999   Gr.

[ Voor 51% gewijzigd door Bolukan op 07-12-2007 08:11 ]


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Cool. Heb je dat vaker, dat je echt niks beters te doen hebt? :+

Handig lijstje voor in de toekomst, tnx :)

Wat betekent mijn avatar?


Verwijderd

Topicstarter
ja super lijst man! die ga ik gebruiken!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 29-11 01:07
Wat in deze lijst ontbreekt zijn postbussen van Nederland. Deze staan wel op http://nl.wikipedia.org/w...an_postcodes_in_Nederland, wellicht dat je deze ook nog mee kunt nemen ;)
Pagina: 1