Thomas: Problem mit SELECT COUNT

Hallo,

ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).

Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.

Konkret sieht meine SQL-Abfrage so aus:
SELECT COUNT (*) AS T1
FROM table1
WHERE bla1 BETWEEN 3 AND 12
UNION SELECT COUNT (*) AS T2
FROM table1
WHERE bla2 BETWEEN 3 AND 12
GROUP BY bla1, bla2

Was mache ich falsch?

Danke schon mal,
Gruß
Thomas

  1. Moin!

    ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).

    Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.

    Kannst du dein gewünschtes Ergebnis mal als Tabelle aufskizzieren. Ich kann mir gerade nicht so gut vorstellen, was du als Ergebnis haben willst.

    Nur so als Vermutung: UNION wird dir vermutlich wenig helfen, weil es Einzelergebnisse nicht "nebeneinander" packt, sondern untereinander.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Moin!

      ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).

      Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.

      Kannst du dein gewünschtes Ergebnis mal als Tabelle aufskizzieren. Ich kann mir gerade nicht so gut vorstellen, was du als Ergebnis haben willst.

      Nur so als Vermutung: UNION wird dir vermutlich wenig helfen, weil es Einzelergebnisse nicht "nebeneinander" packt, sondern untereinander.

      - Sven Rautenberg

      Hmmm, wenn UNION nicht geht - gibts dann eine andere Alternative?
      Was ich haben möchte, ist folgendes:

      ALT:
      Spalte1   |   Spalte2   |   Spalte3   |   Spalte4
      1             0             3             2
      4             2             7             1
      5             1             0             0
      3             8             4             7
      0             5             3             9

      Ich möchte jetzt beispielsweise alle Werte pro Spalte, die >= 3 und <= 7 sind und dazu auch entsprechend benannte Spaltennamen:
      Ziel1   |   Ziel2   |   Ziel3   |   Ziel4
      3           1           4           1

      Das muß doch gehen?!

      Danke + Gruß
      Thomas

      1. moin!

        mit count(spaltenname) kannst du imho die werte pro spalte zählen.

        gruß.
        roger.

        --
        Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
      2. Moin!

        Hmmm, wenn UNION nicht geht - gibts dann eine andere Alternative?

        JOIN.

        Ich möchte jetzt beispielsweise alle Werte pro Spalte, die >= 3 und <= 7 sind und dazu auch entsprechend benannte Spaltennamen:
        Ziel1   |   Ziel2   |   Ziel3   |   Ziel4
        3           1           4           1

        Das muß doch gehen?!

        Indem du die Tabelle viermal miteinander joinst. Oder (was einfacher sein dürfte) viermal die Tabelle einzeln abfragst.

        Datenbanken sind zeilenorientiert. Wenn du mit einer WHERE-Bedingung also die Datensätze eingrenzt, selektierst du damit immer eine Teilmenge aller vorhandenen Datensätze.

        Diese Teilmenge kann von "null" Datensätzen bis hin zu "allen" Datensätzen gehen.

        Und mit diesem Ergebnis kannst du dann diverse Zählungen veranstalten.

        Das, was du aber willst: Du willst für jede Spalte individuell die Anzahl zutreffender Datensätze bzw. Zeilen feststellen. Das geht nur mit individuellen WHERE-Bedingungen je Spalte. Denn du kannst in einer einzelnen Bedingung ja nur mit AND und OR verknüpfen, erhieltest dann eine gewisse Anzahl an Spalten, und könntest die zählen - das Ergebnis wäre je Spalte identisch (weil ja gleichviele Zeilen in jeder Spalte selektiert wurden.

        Deshalb: Entweder JOIN oder vier Einzelabfragen (wobei die Einzelabfragen sicher schneller programmiert sind).

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
  2. Hello,

    Konkret sieht meine SQL-Abfrage so aus:
    SELECT COUNT (*) AS T1
    FROM table1
    WHERE bla1 BETWEEN 3 AND 12
    UNION SELECT COUNT (*) AS T2
    FROM table1
    WHERE bla2 BETWEEN 3 AND 12
    GROUP BY bla1, bla2

    Kann MySQL inzwischen Union subselects?

    Grüße

    Tom