| 

.NET C# Java Javascript Exception

4
Wie funktioniert der Count(*) Befehl bei Access.
Woher weiss "der Computer" was er zählen soll wenn doch in der Klammer ein Stern und keine konkrete zu zählende Spalte steht?
News:
06.11.2009
Bromdampf 95 1 2
5 Antworten
8
Hallo,

count(*) gibt die Anzahl von Elementen in einer Gruppe zurück. Dieses betrifft auch die NULL-Werte und/oder Duplikate.
Gezählt werden hier die Tupel (Datensätze).
06.11.2009
Mario Priebe 6,0k 3 9
Kurz und Informativ. :)
darkdust 17.11.2009
4
Wir bereits geantwortet, werden hier schlicht Datensätze gezählt. count(*) ist deshalb auch etwas ganz Besonderes, denn es gibt zu Recht eben kein sum(*), min(*) oder andere Aggregate zusammen mit *.

Deshalb wird count(*) von einigen DB Systemen in Zusammenhang mit einer leeren where clause und ohne join optimiert und gibt einfach die Anzahl der Datensätze der Tabelle zurück, die häufig in den Metadaten zu finden ist. D.h. ein 'select count(*) from foo' kann auch bei Millarden Datensätzen innerhalb von µs beantwortet werden, während ein 'select count(bar) from foo' vielleicht Minuten benötigt, obwohl das Ergebnis das selbe ist.
06.11.2009
BeachBlocker 617 3
0
Ahhh OK! Super vielen Dank für die rasche Hilfe!
08.11.2009
Bromdampf 95 1 2
2
Bitte den entsprechenden Beitrag mit den grünen Haken als hilfreich markieren ;)
Mario Priebe 08.11.2009
1
Und, wenn wir gerade dabei sind, fürs nächste Mal: "Rückfragen oder Anmerkungen zur Frage selbst sollten als Kommentare unter die Frage geschrieben werden.". ;-)
Blauesocke 08.11.2009
0
Das COUNT(*) die Anzahl aller der Elemente incl. derer die NULL-Werte beinhalten ist ja schon erwähnt worden.

COUNT(foo) allerdings zählt nur dann das Element mit, wenn foo nicht NULL ist. Insbesondere dann wichtig wenn man unter anderem die Zahl der Elemente ermitteln möchte, die aber über einen LEFT OUTER JOIN mit in der Ergebnismenge sind!

Mit anderen Worten, folgende beiden Ergebnisse für die Aliase "countall" und "countfoo" können (müssen aber nicht) unterschiedlich sein:

SELECT COUNT(*) AS countall, COUNT(bar2.foo) AS countfoo
FROM bar1
LEFT OUTER JOIN bar2
ON bar1.x = bar2.y
05.03.2010
Vash 440 2 6
0
Es ist anzumerken, das statt COUNT(*) neuerdings bei SQL-SERVER und ORACLE zunehmend COUNT(1) verwendet wird. Die Zahl 1 ist hier als Konstanter Wert zu verstehen, der verwendete Wert ist belaglos. Da der Wert eh konstant ist kann diese Abfrage vermutlich noch etwas performanter ausgeführt werden. Vom Ergebnis her kommt jedenfalls das gleiche raus.
12.12.2010
bernd_k 41 1
1
Hab mir auf dem MSSQL 2008 den Executionplan angeschaut und er ist in beiden Fällen exakt der selbe.
Gemessen auf eine Tabelle mit 13.000.000 Einträgen.
Wobei es keinen Einfluss nimmt ob ein Index benutzt wird oder nicht.
Floyd 13.12.2010

Stelle deine Sql-Frage jetzt!