Toon posts:

[SQL] verschil tussen count sterretje en selectieve count *

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

Verwijderd

Topicstarter
Als ik een tabel medewerkers heb en ik doe het volgende:

count *

of

count medewerkernummer

wat is dan precies het verschil??
is het zo dat count * gewoon alle occurences optelt (inclusief de eventueel lege)
en de tweede alleen 1 attribuut optelt?

wanneer gebruik je * en wanneer niet?

Chris.

  • Proggy
  • Registratie: Oktober 2001
  • Laatst online: 27-03 10:15
Ik ga er vanuit dat je het over SQL hebt :)

* staat voor ALLE cellen en als je zegt 'medewerkersnr' dan pakt hij alleen deze cel.

Verwijderd

Topicstarter
ja maar in welk geval zou je alle cellen willen tellen? hij telt toch niet alle cellen bij elkaar op? stel je voor er staan 26 medewerkers in een tabel. Hoe kan ik dit het beste laten tellen?

het aantal medewerkers nummers tellen? of gewoon count * ?? ik begrijp de functie van count * dus niet helemaal.

groetjes

chris.

PS: gaat idd over SQL, hoe kan ik de titel aanpassen?

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

cel = kolom in jouw uitleg :)

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Verwijderd schreef op zaterdag 11 december 2004 @ 21:24:
Als ik een tabel medewerkers heb en ik doe het volgende:

count *

of

count medewerkernummer

wat is dan precies het verschil??
is het zo dat count * gewoon alle occurences optelt (inclusief de eventueel lege)
en de tweede alleen 1 attribuut optelt?

wanneer gebruik je * en wanneer niet?

Chris.
Zie bijvoorbeeld http://dev.mysql.com/doc/...BY-Functions.html#IDX1507 voor de documentatie van MySQL met de beschrijving van wat ie nou doet. COUNT(nummer) geeft je het aantal medewerkers met een nummer dat niet NULL is, COUNT(*) geeft je het aantal medewerkers totaal. Aangezien medewerkernummer waarschijnlijk nooit NULL is, zal dit equivalent zijn.

En btw, er wordt hier niks bij elkaar opgeteld. Dat doe je met SUM(medewerkernummer). Ook grappig, maar niet relevant. ;)

[ Voor 8% gewijzigd door Haploid op 11-12-2004 21:42 ]

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Verwijderd

Topicstarter
bedankt, in dit geval maakt het dan idd niets uit en omdat de opgave zo in het boek stond begreep ik het niet. Nu is het helemaal duidelijk!

groetjes,

chris.

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
Was het niet zo dat MySQL (wellicht ook andere SQL's) COUNT(*) beter optimaliseren dan COUNT(nummer)? Ik meen ooit zoiets hier op GoT gelezen te hebben. Het zou dan dus sneller zijn om COUNT(*) te gebruiken.

Full-stack webdeveloper in Groningen


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Volgens mij kon je met een query zoals deze meteen het aantal resultaten en de resultaten zelf ophalen:
SELECT COUNT(naam,medewerkersid,adres,pc,wpl,ed) AS aantalmdw

En dan kan je met een WHILE() lus dit uitwerken...

We are shaping the future


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

ZanderZ schreef op zondag 12 december 2004 @ 01:02:
Was het niet zo dat MySQL (wellicht ook andere SQL's) COUNT(*) beter optimaliseren dan COUNT(nummer)? Ik meen ooit zoiets hier op GoT gelezen te hebben. Het zou dan dus sneller zijn om COUNT(*) te gebruiken.
Juist andersom. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-05 17:04
Op MyISAM tables is COUNT(*) het snelst, omdat de grootte van de tabel apart wordt bijgehouden. Op InnoDB moet voor een COUNT(*) de hele tabel weer doorlopen worden = traag.
Met een specifieke COUNT weet ik niet of een index op die kolom nog uitmaakt of niet, als dat niet uitmaakt zal dat wel traag zijn :p

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Weet je dat zeker? Ik denk dat onder SQL Server dit wel correct is namelijk. Misschien dat MySQL er anders mee omgaat.

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


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

P_de_B schreef op zondag 12 december 2004 @ 15:11:
Weet je dat zeker? Ik denk dat onder SQL Server dit wel correct is namelijk. Misschien dat MySQL er anders mee omgaat.
Mjah, volgens mij hangt het inderdaad wel af van het DBMS dat gebruikt wordt. Was een beetje een ondoordachte en half-afgemaakte posting van me. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • JWolters
  • Registratie: Maart 2001
  • Laatst online: 18-05 19:46

JWolters

Killing Me Killing You

en wat betreft snelheid: hoe staat het met een 'SELECT COUNT('x') FROM table'?

Dus niet alle kolommen of één kolom uit de tabel maar een vaste waarde.

Time is my only fear, an enemy of Sand


Verwijderd

Constante tijd dunkt me... maar heb je geen makkelijker manier om aan het getal 1 te komen? :p

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op maandag 13 december 2004 @ 08:02:
Constante tijd dunkt me... maar heb je geen makkelijker manier om aan het getal 1 te komen? :p
Dat geeft ook gewoon het aantal rijen hoor, wellicht denk je er een distinct bij?

In geval van Oracle geldt iig. dat een count(*) een eigen toeganspad heeft en dus sneller is dan de andere varianten.

Who is John Galt?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
justmental schreef op maandag 13 december 2004 @ 08:07:
[...]

In geval van Oracle geldt iig. dat een count(*) een eigen toeganspad heeft en dus sneller is dan de andere varianten.
Precies, dit is ook bij MS SQL Server het geval.

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


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

JWolters schreef op maandag 13 december 2004 @ 07:31:
en wat betreft snelheid: hoe staat het met een 'SELECT COUNT('x') FROM table'?

Dus niet alle kolommen of één kolom uit de tabel maar een vaste waarde.
Hij zal nog steeds alle waarden uit die tabel op moeten zoeken en een tellertje verhogen. Waarschijnlijk kan je beter count(*) gebruiken omdat de databases daarvoor zodanig geoptimaliseerd zijn dat er bijvoorbeeld speciale paden (zoals oracle) gebruikt worden, of op zijn minst (indien van toepassing) de meest geschikte index gebruikt kan worden.
Pagina: 1