Ankündigung

Einklappen
Keine Ankündigung bisher.

COUNT in mehreren Feldern mit unterschiedlichen Bedingungen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • COUNT in mehreren Feldern mit unterschiedlichen Bedingungen

    Hallo,

    sag mal, kann man innerhalb einer MySQL Abfrage mehere Werte unter verschiedenen Bedingungen zählen. Zwei Beispiele:

    SELECT COUNT(id) FROM tabelle WHERE a=1
    SELECT COUNT(id) FROM tabelle WHERE a=2

    Es geht im Prinzip um eine etwas aufwendigere statistische Auswertung, wo ich an einer Stelle 15-20 solcher Counts habe um eben die Anzahl bestimmter Elemente unter einer bestimmten Bedingung zu ermitteln, die Spalte (hier a) muss nicht immer die gleiche sein, sondern kann auch variieren. Kann man das schneller und besser lösen? Oder habt ihr andere Lösungsvorschläge wie man das sinnvoller lösen kann. Besser in einer PHP Schleife zählen die unterschiedlichen Elemente nach Bedingung zählen?

    Beste Grüße
    Guido

  • #2
    Ich hab zwar nicht so ganz verstanden was genau du willst aber ...:

    COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.

    Um das zu erreichen was du willst (oder was ich vermute was du willst ) könntest du mit SUM() und IF() arbeiten:

    SELECT SUM(IF(a=1, 1, 0)) AS a_one, SUM(if(a=2, 1, 0)) as a_two, SUM(if(b=x, 1, 0)) as b_is_x FROM table


    Oder auch irgendwie per GROUP BY:
    SELECT count(id), a FROM table GROUP BY a
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      gehts ned vlt. auch so i-wie:
      SELECT COUNT(id) FROM tabelle WHERE a=1 OR a=2

      ?


      lg
      Andi

      Kommentar


      • #4
        Den Vorschlag "Agrajag" werde ich gleich mal ausprobieren, ob das so funktioniert und wie produktiv sich das erweist. Sieht nicht schlecht aus, auch wenn das bei 20 Countern schon ganz ordentlich daherkommt. Bei der Geschichte mit dem GROUP BY habe ich noch nicht verstanden, wo du da genau den Ansatz siehst.

        COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.
        Und wo siehst du da nun den Unterschied, wenn id ein auto increment Feld ist. Ich behaupte COUNT(id) ist schneller als COUNT(*). Nicht?

        @DER_Brain
        Das geht nicht, da ich nicht Elemente unter meheren Bedingungen zählen möchte, sondern das Ergebnis des Zählers für jede Bedingung einzeln vorliegen muss.

        Viele Grüße
        Guido

        Kommentar


        • #5
          Zitat von ecomeback
          [...]Die Geschichte mit dem GROUP BY habe ich noch nicht verstanden, wo du da genau den Ansatz siehst.
          Die GROUP-BY-Geschichte funktioniert natürlich nur dann, wenn dich nur die Anzahl der Werte in der a-Spalte intressiert.... Ich weiß/wußte ja nicht genau was du erreichen willst

          COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.
          Und wo siehst du da nun den Unterschied, wenn id ein auto increment Feld ist. Ich behaupte COUNT(id) ist schneller als COUNT(*). Nicht?
          Ich wollte nur nochmal klarmachen, warum du mit COUNT() da wahrscheinlich nicht weiterkommst bzw. warum ein SELECT COUNT(a), COUNT(b) ... nicht das gewünschte Ergebnis bringen wird....
          (Ob ein COUNT(id) wirklich schneller ist weiß ich nicht. Glaube ich aber nicht.)
          [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

          Kommentar


          • #6
            Ich würde eher sagen das COUNT(*) schneller ist! Da läuft er einfach jede Zeile durch und inkrementiert den Counter. Wenn du COUNT(id) hast überprüft er bei jeder Zeile ob "id" = NULL, wenn ja dann inkrementiert er den Counter nicht!

            Kommentar


            • #7
              @RaZoR: COUNT(*) ist langsamer als COUNT(PrimaryKEY), da bei ersterem alle Spalten einer Tabelle einbezogen werden.
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design [B]before[/B] you start to write code!
              2. Discuss and review it together with [B]experts[/B]!
              3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
              4. Write [I][B]clean and reusable[/B][/I] software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #8
                ist zwar schon was älter, aber für andere Suchende:

                Code:
                select a, count(id) group by 1
                liefert alle vorhandenen Werte für a mit der dazugehörigen Anzahl jeweils in einer Zeile.

                Code:
                select sum(a=1), sum(a=2), sum(a=3)
                liefert die Anzahl ausgewählter Werte in einer Zeile.

                Kommentar


                • #9
                  Uhm.. was ist gegen das gute, alte "SELECT count(*), a FROM table GROUP BY a" einzuwenden? Abgesehen davon, das a auch mal b heissen kann, was man ja easy lösen kann mittels eines zweiten Queries.

                  Das Ergebnis wäre eine Übersicht ala:
                  count(*) a
                  23 1
                  17 2
                  9 3
                  liefert also alle counts für jeden einzigartigen a-Wert mit einem Query.

                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar

                  Lädt...
                  X