Aufbereitung / Berechnung bereits in Query

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

  • Aufbereitung / Berechnung bereits in Query

    Hallo zusammen,
    ich habe eine Frage. Ist es möglich via MySQL folgendes Szenario in einer Query darzustellen:
    ich habe eine Tabelle mit 8 Spalten für Ergebnisse einer Befragung, mögliche Antworten: Ja -> INT-> 1 Nein -> INT -> 0, sowie den Timestamp den ich abspeichere. Ich hätte gern eine Ausgabe, die mir den Durchschnitt aller Datensätze angibt, also quasi zunächst den Durchschnitt des jeweiligen Datensatzes bilden und dann von allen berechneten Durchschnitten den Durchschnitt.
    Das wäre Teil 1 der Abfrage.

    Teil 2 wäre das Gleiche jedoch sortiert nach Jahren über den Timestamp.

    Am Ende ein Ergebnis:



    Ist dies mit einer Abfrage möglich? Oder nur mit Kombinationen und etwas PHP?

    Vielen Dank,
    Grüße
    Teco

  • #2
    Hallo,

    sieh dir mal im MySQL-Handbuch den gesamten Abschnitt "11.11. Functions and Modifiers for Use with GROUP BY Clauses" an. In 11.11.2 geht's dann um GROUP BY ... WITH ROLLUP, was genau das sein dürfte, was du im zweiten Teil deiner Frage suchst.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Code:
      SELECT SUM(frage_1), SUM(frage_2) FROM befragung GROUP BY time WITH ROLLUP;
      Soll ich die Summe jeder Frage Spalte bilden?
      Ich habe irgendwie Verständnisprobleme das abstrakt auf mein Problem anzuwenden? Ich könnte natürlich auch mühselig alles über mehrere Abfragen in PHP aufbereiten, aber träume schon länger von einer perfekten Vorformatierung der Query für den Einsatzzweck.

      Kommentar


      • #4
        Das kann ich dir nicht sagen, bisher kenne ich das Modell der benutzten Tabellen nicht.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Hallo Amica,
          das ist natürlich gar kein Problem

          Code:
          CREATE TABLE IF NOT EXISTS `it_test_1` (
            `id` int(5) NOT NULL AUTO_INCREMENT,
            `ip` varchar(100) NOT NULL,
            `time` int(11) NOT NULL,
            `frage_1` int(1) NOT NULL,
            `frage_2` int(1) NOT NULL,
            `frage_3` int(1) NOT NULL,
            `frage_4` int(1) NOT NULL,
            `frage_5` int(1) NOT NULL,
            `frage_6` int(1) NOT NULL,
            `frage_7` int(1) NOT NULL,
            `frage_8` int(1) NOT NULL,
            PRIMARY KEY (`id`)
          ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='Herzinsuffizienz Test' AUTO_INCREMENT=138 ;
          Ich gebe zu, sehr einfach gehalten. Aber um die benötigten Daten darzustellen, denke ich, ausreichend.

          Kommentar


          • #6
            Hallo,

            ich würde diese DB erstmal normalisieren. Für jede Frage eine Spalte anzulegen, halte ich für kein gutes DB-Design. Ich schlage vor, du machst eine Fragetabelle, eine Benutzertabelle und eine Fragebogentabelle, die als n:m-Relation zwischen den beiden fungiert.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Hallo Amica,
              für den Anwendungszweck viel zu aufwendig. Das wäre ja eine dynamische Lösung. Sowohl Fragen als auch der Test generell wird nie wieder verändert.
              Meine Idee wäre jetzt folgende: ich addiere alle Fragespalten, da JA eine 1 repräsentiert. Dann ermittle ich die Anzahl an Datensätzen und multipliziere dies mit der Anzahl an Fragen.
              Wäre das eine halbwegs intelligente Vorgehensweise?
              Nur die Kategorisierung nach Jahren ist mir noch unklar.

              Kommentar


              • #8
                Das mit der Addition klingt vernünftig. Wie du die Gruppierung nach Jahren erreichst, dazu hatte ich dich schon auf Abschnitte im Handbuch verwiesen.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar

                Lädt...
                X