[sql (access)] count op een group

Pagina: 1
Acties:

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08-2025
Hallo,

Ik ben met een eigen statistieken pagina bezig, de gegevens heb ik al maar nu moet ik ze nog printen. Ik heb in mijn tabel (visitorcount) een rij die heet clientbrowser, hierin staat bijvoorbeeld "internet explorer 6" of "firefox". Ik wou de grootste aantallen bekijken zonder dat ik een loop in mijn asp code hoef te doen! Volgens mij moet dit met sql alleen mogelijk zijn, maar kan nergens vinden hoe!

Ik denk zelf dat ik iets van een groupcount nodig heb, maar da bestaat niet. Wat het wel moet zijn weet ik dus ook niet en ik hoopte dat iemand hier mij aan de juiste termen of een voorbeeld kon helpen.

Alvast bedankt,

Angelo Michel

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Je hebt de juiste termen bijna, kijk eens naar COUNT en GROUP BY

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08-2025
Thx voor die pagina Rookie, ik krijg helaas toch een bug:

code:
1
SELECT ClientBrowser, Count(ClientBrowser) As BrowserCount FROM VisitorCounter GROUP BY ClientBrowser ORDER BY BrowserCount DESC


Krijg als bug

Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.


Ik denk dat hij die BrowserCount bedoeld. Want die bestaat niet, alleen hier tijdelijke als die count!


p.s. ik heb hem zonder de order by getest en dan werkt ie opzich wel, maar dan gewoon op de volgorde dat hij ze tegenkomt, en ik wil de grootste count als eerste, vandaar dat ik die order by wou toepassen!

[ Voor 21% gewijzigd door semicon op 13-07-2006 12:47 ]


Verwijderd

Het is voor mij al weer een tijdje geleden maar het heeft te maken met de Alias BrowserCount die kent de Jet Engine bij de Group By nog niet.
Als je het aanpast naar:
code:
1
SELECT ClientBrowser, Count(ClientBrowser) As BrowserCount FROM VisitorCounter GROUP BY ClientBrowser ORDER BY Count(ClientBrowser) DESC

moet het volgens mij wel goed gaan.

Paul

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
ik geloof dat je bij access steeds alle geselecteerde velden moet groeperen, ook als het geen zin heeft om te groeperen. Weet niet of dat ook het geval is met functies als max, min, avg, count, ...

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08-2025
pmeems thx, dat does the trick 8)

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:13

Dido

heforshe

ORDER BY 2 doet het ook, en ik kan me voorstellen dat dat is het geval van wat ingewikkelder formules voor een betere performance zorgt.

Wat betekent mijn avatar?


  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08-2025
Yea inderdaad, thx.

Nou heb ik een followup op dit probleem eigenlijk, meeste lukt me wel of kan ik wel uitkomen maar zon zelfde query op datums is wat moeilijker, misschien dat een van jullie mij daar ook wat tips bij kan geven!


Zoiets werkt:
code:
1
SELECT VisitedDateTime, Count(*) As DateCount FROM VisitorCounter GROUP BY VisitedDateTime ORDER BY 2 DESC


Maar wat ik eigenlijk wil iseen group by day(visiteddatetime) en een count hierbij. Dus voor elke dag, want groupen op zelfde datum exact komt nooit voor (of bijna nooit :P) Maar day, datepart, dateadd heb ik al geprobeerd en werken allemaal niet. Krijg een melding dat het te maken heeft met aggegrate functions ofzo, maarja ik weet ook niet of day(visiteddatetime) wel werkt


edit: wat ik ook probeer, de fout blijft:

You tried to execute a query that does not include the specified expression 'VisitedDateTime' as part of an aggregate function.

[ Voor 12% gewijzigd door semicon op 13-07-2006 16:55 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Vrij vertaald: voor alle velden in je select deel moet je opgeven wat je wilt (sommeren, grouperen, eerste, laatste, max, min, etc) Afaik accepteert alleen MySQL losse velden in een aggregatiequery 8)7

maw:
code:
1
select datetimevisited, select count(*) as x from tabel group by  datevalue(datetimevisited)

geeft een foutmelding, maar
code:
1
2
3
select datevalue(datetimevisited), select count(*) as x from tabel group by  datevalue(datetimevisited) 

select first(datetimevisited), select count(*) as x from tabel group by datevalue(datetimevisited)

werken wel
edit:
first etc bij wijze van illustratie van het idee dat elke aggregatiefunctie qua syntax voldoet ;)

[ Voor 9% gewijzigd door Lustucru op 13-07-2006 23:00 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
offtopic:
'first' is eigenlijk ook maar raar, wat is dan het eerste record als je geen sorteervolgorde opgeeft? Ik kan me voorstellen dat het op volgorde van de geclusterde index zou zijn, maar je hebt afaik geen garantie dat altijd hetzelfde record de 'eerste' is

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:13

Dido

heforshe

die first maakt niet uit, aangezien je toch niet geinteresseerd bent in de tijd. Die kun je er ook afstrippen, de eerste van de twee is denk ik mooier, maar op zich geeft first altijd een record met de goede datum, precies wat je wilt.

Wat betekent mijn avatar?

Pagina: 1