1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
3713
3713
EMPFEHLEN
-
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:
Code sql:1 2 3
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?Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
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 :1 2 3 4
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
-
04.03.07 15:46 #5
performanter sollte folgendes sein, falls du alle versch. Werte der Tabelle brauchst:
Code sql:1
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üftGeändert von tobias_petry (04.03.07 um 15:49 Uhr)
"If you give someone a program, you will frustrate them for a day
but if you teach them how to program, you will frustrate them for a lifetime."
-
-
04.03.07 19:00 #7
[QUOTE=ar43r;1382673]Wie soll es das ausgeben was casa74 moechte?[/url]
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.
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
"If you give someone a program, you will frustrate them for a day
but if you teach them how to program, you will frustrate them for a lifetime."
-
Er will das bekommen:
Code :1 2 3
| Anzahl_A | Anzahl_B -------------------------------------------------- 1 | 100 | 200
Ich verstehe nicht was du mit
SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`
meinst....
-
04.03.07 22:58 #9
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)"If you give someone a program, you will frustrate them for a day
but if you teach them how to program, you will frustrate them for a lifetime."
-
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.Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
So sollte es auch mit dem SQL-Server gehen:
Code :1 2 3
select (select count(ID) As Anzahl_A from "Tabelle" where "Spalte" = 'A' ) as A, (select count(ID) As Anzahl_B from "Tabelle" where "Spalte" = 'B' ) as B
Sollte man nicht erstmal dem Frager eine Lösung aufzeigen, die einfach nur die Frage beantwortet?
-
Nunja, der Frager hat die Frage im Jahre 2007 gestellt und hat insgesamt 7 Beiträge im Forum. Wir warten am besten mal bis er dir einen Vorschlag präsentiert.
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
14.05.12 22:45 #13
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hier mal noch eine Alternative zu der UNION- bzw. Skalare-Subquery-Lösung :
Code sql:1 2 3 4
SELECT [id] ,[attribut1] ,[attribut2] FROM [count_example]
Ausgabe:
Code :1 2 3 4 5 6 7 8 9 10
id attribut1 attribut2 ----------- -------------------------------------------------- ----------- 1 A 11 2 B 22 3 B 33 4 A 11 5 A 33 6 C 22 (6 Zeile(n) betroffen)
Zählen:
Code sql:1 2 3 4 5 6 7 8
SELECT SUM(CASE WHEN attribut1 = 'A' THEN 1 ELSE 0 END) AS "As" ,SUM(CASE WHEN attribut1 = 'B' THEN 1 ELSE 0 END) AS "Bs" ,SUM(CASE WHEN attribut1 = 'C' THEN 1 ELSE 0 END) AS "Cs" ,SUM(CASE WHEN attribut2 = 11 THEN 1 ELSE 0 END) AS "11er" ,SUM(CASE WHEN attribut2 = 22 THEN 1 ELSE 0 END) AS "22er" ,SUM(CASE WHEN attribut2 = 33 THEN 1 ELSE 0 END) AS "33er" FROM count_example
Ausgabe:
Gruß TomCode :1 2 3 4 5
As Bs Cs 11er 22er 33er ----------- ----------- ----------- ----------- ----------- ----------- 3 2 1 2 2 2 (1 Zeile(n) betroffen)
Java rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Mehrere Abfragen in einem Bericht? MS Access 2003
Von fonds im Forum Office-AnwendungenAntworten: 4Letzter Beitrag: 05.09.08, 10:17 -
mehrere mySQL-Abfragen in einem String
Von Dac-XP im Forum PHPAntworten: 4Letzter Beitrag: 05.11.07, 18:53 -
Mehrere MySQL-Statements in einem Query
Von bisselbock im Forum PHPAntworten: 5Letzter Beitrag: 18.01.07, 13:39 -
MySQL: Mehrere Counts in einem Query
Von sensei17 im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 21.03.06, 12:43 -
Mehrere Abfragen zu einem Array?
Von dennis2412 im Forum PHPAntworten: 8Letzter Beitrag: 22.11.03, 09:31





Zitieren



Login





