Mehrere Count-Abfragen mit einem Query

casa74

Grünschnabel
Hallo Zusammen,

bin neu hier und möchte mich mit meinem ersten Problem erstmal vorstellen :)
Versuche mich gerade an ASP und dem damit zum Teil verbundenen Datenbankthema,
und das führt mich auch schon zu meinem erstem Problem.

Ich versuche die Häufigkeit einer ID in Abhängigkeit von 2 Spalteneinträgen
zu ermitteln.
Ich weiss wie ich das in zwei separaten Queries hinkriege,
aber ich hätte es gerne in einem Query zusammengefasst.

select count(ID) As Anzahl_A from "Tabelle" where "Spalte" = 'A'
select count(ID) As Anzahl_B from "Tabelle" where "Spalte" = 'B'


Der Hintergrund ist der, daß ich über ASP die Werte ermitteln
und anzeigen möchte und dabei nur einen Query ausführen möchte.

Für eine Lösung oder Alternative meines Problems wäre ich euch sehr dankbar.


MFG

Casa
 
Hi,

UNION ist das Schlüsselwort, was du suchst ;)
ungefähr so:
SQL:
select count(ID) As Anzahl_A from "Tabelle" where "Spalte" = 'A'
UNION
select count(ID) As Anzahl_B from "Tabelle" where "Spalte" = 'B'

Aber mal eine Frage offtopic:
Wieso jetzt noch neu in ASP einsteigen und nicht in ASP.NET?
 
Hi niggo,

erstmal vielen Dank für deine rasche Antwort, hast mich schon ein Stück weitergebracht.
Habe deinen Query mal im SQL Query Analyzer getestet und tatsächlich bekomme ich beide Count-Werte.
Was mich allerdings noch verwirrt,ist daß beide Ergebnisse unter einer Spalte in 2 Reihen angezeigt werden.

Sieht dann so aus :

| Anzahl_A
-----------------------
1 | 100
2 | 200


Hätte dort jetzt so etwas erwartet :

| Anzahl_A | Anzahl_B
--------------------------------------------------
1 | 100 | 200



Wenn ich dann versuche mit Recordset:

Anzahl_B = objRS("Anzahl_B")
Anzahl_A = objRS("Anzahl_A")


das ganze in 2 Variablen zu speichern, laufe ich auf folgenden Fehler :
Item cannot be found in the collection corresponding to the requested name or ordinal.




Antwort Offtopic:
Weiss ich selbst nicht so genau, dachte für den Einstieg ist ASP besser.
 
so muss das gehen:
Code:
 SELECT count(*) AS Anzahl
,(SELECT count(*) FROM Customers WHERE CompanyName like 'A%') AS Anzahl_A
,(SELECT count(*) FROM Customers WHERE CompanyName like 'B%') AS Anzahl_B
FROM Customers

Diese Abfrage habe ich gegen Northwind DB getestet
 
performanter sollte folgendes sein, falls du alle versch. Werte der Tabelle brauchst:
SQL:
SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`

Nebenbei möchte ich noch anmerken, dass ein Count auf eine Spalte langsamer ist als auf alle Datensätze einer Tabelle, da er dann nicht auf null-Werte überprüft
 
Zuletzt bearbeitet:
performanter sollte folgendes sein, falls du alle versch. Werte der Tabelle brauchst:
SQL:
SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`

Wie soll es das ausgeben was casa74 moechte?
Nebenbei möchte ich noch anmerken, dass ein Count auf eine Spalte langsamer ist als auf alle Datensätze einer Tabelle, da er dann nicht auf null-Werte überprüft

Dafuer ist es aber sicherer.
 
Wie soll es das ausgeben was casa74 moechte?
es tut doch das gleiche, nur das er eben die Count-Werte zeilenweise auslesen muss, dafür aber ist es aber um ein vielfaches schneller, da er nicht 2 getrennte Abfragen machen und diese mergen, sondern nur eine Abfrage macht.

Dafuer ist es aber sicherer.
sicherer? definiere sicherer?
Es ist genau das gleiche wie nen Count auf eine Spalte, nur dass es um ein vielfaches schneller ist, da ihm egal ist, was in der Spalte steht.

MySQL-Optimierung nennt man solche Dinge ;)
 
Er will das bekommen:
Code:
| Anzahl_A | Anzahl_B
--------------------------------------------------
1 | 100 | 200

Ich verstehe nicht was du mit
SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`
meinst....
 
Er will das bekommen:
Code:
| Anzahl_A | Anzahl_B
--------------------------------------------------
1 | 100 | 200

Ich verstehe nicht was du mit
SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`
meinst....

das von ihm genannte ist ja ien Beispiel, also kann es ja sein, dass er 10-12 counts macht, das wären dann 11-13 Querys für die Datenbank (Count-Querys + mergen) das würde ziemlich auf die db-last gehen.
Mein Query zählt die Vorkommen JEDES wertes der spalte und gibt dies dann in mehreren Datensätzen aus, das ist für die Datenbank weit schonender. (auch bei nur 2 verschiedenen werten)
 
Hi,

Das ist klar, dass der Query mit Group By performanter ist. Aber schon beim Vorschlag mit UNION war das Ergebnis nicht das gewollte. Auch stehen die Datensätze in einer Spalte und nicht in einer Zeile.
 
Zurück