tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Thomas Darimont
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
3713
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    casa74 casa74 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    7
    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
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    casa74 casa74 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    7
    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.
     

  4. #4
    ar43r ar43r ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    7
    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
     

  5. #5
    Avatar von tobias_petry
    tobias_petry tobias_petry ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    284
    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üft
    Geä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."

  6. #6
    ar43r ar43r ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    7
    Zitat Zitat von tobias_petry Beitrag anzeigen
    performanter sollte folgendes sein, falls du alle versch. Werte der Tabelle brauchst:
    Code sql:
    1
    
    SELECT COUNT(*) AS `anzahl` FROM `tabelle` GROUP BY `spalte`
    Wie soll es das ausgeben was casa74 moechte?
    Zitat Zitat von tobias_petry Beitrag anzeigen

    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.
     

  7. #7
    Avatar von tobias_petry
    tobias_petry tobias_petry ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    284
    [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.

    Zitat Zitat von ar43r Beitrag anzeigen
    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
     
    "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."

  8. #8
    ar43r ar43r ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    7
    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....
     

  9. #9
    Avatar von tobias_petry
    tobias_petry tobias_petry ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    284
    Zitat Zitat von ar43r Beitrag anzeigen
    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....
    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."

  10. #10
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  11. #11
    wepino wepino ist offline Grünschnabel
    Registriert seit
    Dec 2007
    Beiträge
    1
    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?
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  13. #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:
    Code :
    1
    2
    3
    4
    5
    
    As          Bs          Cs          11er        22er        33er
    ----------- ----------- ----------- ----------- ----------- -----------
    3           2           1           2           2           2
     
    (1 Zeile(n) betroffen)
    Gruß Tom
    Nico Graichen bedankt sich. 
    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

  1. Mehrere Abfragen in einem Bericht? MS Access 2003
    Von fonds im Forum Office-Anwendungen
    Antworten: 4
    Letzter Beitrag: 05.09.08, 10:17
  2. mehrere mySQL-Abfragen in einem String
    Von Dac-XP im Forum PHP
    Antworten: 4
    Letzter Beitrag: 05.11.07, 18:53
  3. Mehrere MySQL-Statements in einem Query
    Von bisselbock im Forum PHP
    Antworten: 5
    Letzter Beitrag: 18.01.07, 13:39
  4. MySQL: Mehrere Counts in einem Query
    Von sensei17 im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 21.03.06, 12:43
  5. Mehrere Abfragen zu einem Array?
    Von dennis2412 im Forum PHP
    Antworten: 8
    Letzter Beitrag: 22.11.03, 09:31