Ankündigung

Einklappen
Keine Ankündigung bisher.

COUNT im JOIN

Einklappen

Neue Werbung 2019

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

  • COUNT im JOIN

    edit für Eilige:
    http://sqlfiddle.com/#!2/89458/4/0
    ganz unten sollte nach der Abfrage auch Stimmenthaltung=0 aufscheinen

    ************************************************** ***********


    Folgende DB Ausgangslage für eine Umfrage:
    2 Tabellen:
    pollA für die vorgegebenen Antworten, pollR für Wahl des Teilnehmers.
    A: code, text,wert (UmfrageID, ausformulierter Text, Zahl - 0123 bei 4 Antworten)
    R: code, wert (UmfrageID, Zahl)
    In R sind also die Ergebnisse der User gespeichert - code für die Umfrage und Zahl für die gewählte Antwort.
    Jetzt sollen die Fragen als Text und dazu passend die Summe der gewählten Antworten abgerufen werden:

    Code:
    SELECT A.text, COUNT(*) AS erg  
    FROM pollA AS A 
    LEFT JOIN pollR AS R 
    ON A.wert=R.wert 
    WHERE A.code='26dcd57...' 
    GROUP BY R.wert
    Funktioniert, allerdings werden die Antworten nur dann angezeigt, wenn zumindest eine Stimme abgegeben wurde. Es sollten aber immer alle Antworten angezeigt werden und da eben mit der Null. Dachte, der LEFT JOIN tut mir das...
    Wie muss ich's anders angehen?
    Danke schon mal für's Lesen.


  • #2
    nicht COUNT(*) sondern COUNT(R.id)
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Leider nein, 0-Ergebnisse werden ignoriert.

      Kommentar


      • #4
        Code:
        SELECT
           A.UmfrageID, 
           (SELECT
              COUNT(*) 
           FROM
              PollR R 
           WHERE
              R.UmfrageID = A.UmfrageID) AS Count   
        FROM
           pollA A
        Maybe like this
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          Zitat von 96percent Beitrag anzeigen
          Leider nein, 0-Ergebnisse werden ignoriert.
          Was heisst "werden ignoriert"?
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            ignoriert= sie scheinen bei der Abfrage nicht als Ergebnis auf.
            Antwort 1: 4 Stimmen
            Antwort 2: 3 Stimmen
            [Antwort 3: keine Stimme, sieht man nicht]

            Kommentar


            • #7
              @VPh
              Unterabfrage bringt (bei mir) immer, ich sitz ja schon länger dran, ein "Summenergebnis", bedeutet:

              Ja/Nein/Stimmenhaltung = 5/5/5
              Sollte aber
              Ja/Nein/Stimmenhaltung = 3/2/0
              sein.

              Aber wie gesagt, das Addieren ist nicht das Problem.

              Kommentar


              • #8
                http://sqlfiddle.com

                Beispieldaten bitte.
                Relax, you're doing fine.
                RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                Kommentar


                • #9
                  http://sqlfiddle.com/#!2/89458/4/0

                  Code:
                  CREATE TABLE pollA 
                  (
                       id int auto_increment primary key, 
                       code varchar(32), 
                       antwort varchar(30),
                       wert tinyint 
                      );
                  
                  CREATE TABLE pollR 
                  (
                       id int auto_increment primary key, 
                       code varchar(32), 
                       wert varchar(1) 
                      );
                  
                  
                  
                  INSERT INTO pollA
                  (code,antwort,wert)
                  VALUES
                  ('xyz13', 'Ja','0'),
                  ('xyz13', 'Nein','1'),
                  ('xyz13', 'Stimmenthaltung','2')
                  ;
                  
                  
                  
                  INSERT INTO pollR
                  (code,wert)
                  VALUES
                  ('xyz13', '0'),
                  ('xyz13', '1'),
                  ('xyz13', '0'),
                  ('xyz13', '1'),
                  ('xyz13', '1')
                  ;
                  
                  SELECT A.antwort AS antw, COUNT(*) AS erg  
                  FROM pollR R JOIN pollA A 
                  ON A.wert=R.wert 
                  WHERE R.code='xyz13' 
                  GROUP BY R.wert

                  Kommentar


                  • #10
                    Zitat von 96percent Beitrag anzeigen
                    [
                    Code:
                    SELECT A.antwort AS antw, COUNT(*) AS erg  
                    FROM pollR R JOIN pollA A 
                    ON A.wert=R.wert 
                    WHERE R.code='xyz13' 
                    GROUP BY R.wert
                    Syntaxfehler.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Syntaxfehler: Ich seh ihn leider nicht

                      SELECT A.antwort AS antw, COUNT(*) AS erg
                      FROM pollA A LEFT JOIN pollR R
                      ON A.wert=R.wert
                      WHERE A.code='xyz13'
                      GROUP BY R.wert ORDER BY erg DESC

                      Ergibt ein Ergebnis mit Stimmenthaltung, allerdings mit einer 1 statt einer 0.

                      Kommentar


                      • #12
                        Zitat von 96percent Beitrag anzeigen
                        Syntaxfehler: Ich seh ihn leider nicht
                        Macht nix, MySQL auch nicht.

                        Im Prinzip machst Du:

                        Code:
                        test=*# create table a (col1 int, col2 int);
                        CREATE TABLE
                        Time: 20,136 ms
                        test=*# create table b (col1 int, col2 int);
                        CREATE TABLE
                        Time: 0,817 ms
                        test=*# select a.col1, count(*) from a left join b on a.col1=b.col1 group by b.col2;
                        ERROR:  column "a.col1" must appear in the GROUP BY clause or be used in an aggregate function
                        LINE 1: select a.col1, count(*) from a left join b on a.col1=b.col1 ...

                        MySQL ist (in aktuellen Versionen) blind für diesen Fehler, ab 5.7.5 oder so erkennt es den Fehler. Du kannst den Bullshit weiter betreiben, irgendwann fällt es Dir mit einem Fehler auf die Füße. Bis dahin bekommst, je nach Version, möglicherweise sogar bei gleichen Daten unterschiedliche Ergebnisse. Meist falsche.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          lol!
                          Standards - Best Practices - AwesomePHP - Guideline für WebApps

                          Kommentar


                          • #14
                            Das würde jetzt funktionieren, aber ob der Schelte von akretschmer bin ich mir nicht sicher, ob's richtig ist im Sinne von valide für mysql 5.7++

                            Code:
                            SELECT A.antwort, COUNT(R.wert) AS erg  
                            FROM pollA A LEFT JOIN pollR R 
                            ON A.wert=R.wert 
                            WHERE A.code='xyz13' 
                            GROUP BY A.antwort

                            Kommentar


                            • #15
                              Zitat von 96percent Beitrag anzeigen
                              Das würde jetzt funktionieren, aber ob der Schelte von akretschmer bin ich mir nicht sicher, ob's richtig ist im Sinne von valide für mysql 5.7++

                              ist es.
                              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                              Kommentar

                              Lädt...
                              X