[SQL] Distinct en Count op tabel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemorgen heren,

Ik zit al een paar dagen te rotzooien met een database waaruit ik graag enkele resultaten wil halen.
Nu is mijn kennis over SQL niet zo heel groot, maar ik heb het voor elkaar om in een SP een soort van resultaten lijst te toveren uit een grote database.
Deze ziet er ongeveer zo uit:

BestellingBezoekerBezoekWinkel
1Piet1Utrecht
1Piet2Utrecht
1Piet3Amersfoort
2Henk1Amsterdam
3Kees1Amersfoort
3Kees2Amersfoort


Uit de volgende tabel blijkt dat Piet 2 keer de winkel in Utrecht heeft bezocht en 1 keer in Amersfoort en toen een artikel heeft gekocht. Ook dat Henk 1 keer in Amsterdam is binnengelopen en direct iets heeft gekocht.

Nu probeer ik uit deze tabel hetvolgende te halen:
  • Hoeveel mensen zijn in ALLEEN in Amersfoort geweest (in dit geval 1, Kees)
  • Hoeveel mensen zijn 1 keer langs geweest, hoeveel mensen 2 en hoeveel mensen 3
Ik heb al vanalles geprobeerd en erover gelezen, zoals COUNT(DISTINCT), etc. Maar ik krijg het maar niet voor elkaar om te zien hoeveel er nou precies samen zijn gegaan in een distinct.

Heeft iemand van jullie een idee hoe ik bovenstaande data eruit kan halen? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • MaxxMark
  • Registratie: Januari 2000
  • Laatst online: 12-09 00:41

MaxxMark

HT is Tof!

Ik zou me als ik jou was inderdaad wat meer gaan richten op het uitbreiden van je kennis van SQL :)

Maar om je toch van dienst te zijn. Ik denk dat het handig is om met het GROUP statement te werken.
Bijvoorbeeld:

SELET winkel,count(*), as uniek,sum(bezoek) as totaal FROM tabel GROUP BY winkel;

Op deze manier groepeer je de resultaten op winkel. Je zal nu een lijstje krijgen als:
Utrecht | 2 | 3
Amersvoort | 3 | 6
Amsterdam | 1 | 1

Als je op gebruikersniveau wilt kijken moet je groeperen op bezoeker. Of eventueel een combinatie van bezoeker en winkel.

Edit:
Ik zie nu net dat jouw "bezoek" voor het hoeveelste bezoek het is. Iets wat ik database design technisch nou niet heel erg snel zou doen. Ik dacht namelijk dat bijv regel 2 aangaf dat "piet" 2x in utrecht is geweest (Dus dat met ieder bezoek zijn "bezoek" voor die stad wordt opgehoogd met 1).

[ Voor 21% gewijzigd door MaxxMark op 04-02-2010 10:49 . Reden: toevoeging ]

T: @mark_prins - Kick ass developers: www.omniscale.nl - HT: Where it all went wrong...


Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 10-09 21:59
Een mogelijke oplossing voor je eerste probleem is als volgt:
SQL:
1
2
3
4
5
SELECT DISTINCT T1.Bezoeker
FROM dbo.Tabel AS T1
LEFT JOIN dbo.Tabel AS T2 ON T1.Bezoeker = T2.Bezoeker AND T2.Winkel != 'Amersfoort'
WHERE T1.Winkel = 'Amersfoort'
AND T2.Winkel IS NULL


Voor je tweede probleem zou ik eens kijken naar de GROUP BY clause en die te combineren met een HAVING COUNT(*) = X