Aufgabe für den Nachmittag

Mal sehen, ob das jemand lösen kann. Dazu nötig sind SQL-Kenntnisse und ein bisschen guter Willen :-)

Aufgabe:
Es existiert eine Tabelle TAB. Diese enthält folgende Felder
ID, SUPERID, DATETIME, INFO

Beispieltabelle:
1,1,’14:15:13 09/08/2004′,’blabla1′
2,1,’14:17:12 09/08/2004′,’blabla2′
3,2,’14:25:11 09/08/2004′,’blabla3′
4,2,’14:28:13 09/08/2004′,’blabla4′
5,2,’14:37:43 09/08/2004′,’blabla5′

„SELECT (max(datetime)-min(datetime)) FROM tab GROUP BY superid“ würde dafür sorgen, dass man eine Differenz der höchsten und niedrigsten Zeit pro SuperID erhält. Ich möchte nun davon (von dieser Differenz) den Durchschnitt über die gesamte Tabelle haben. Das knifflige dabei: Subqueries sind NICHT erlaubt :-)

So und nun viel Spaß *g*


Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

20 Antworten zu „Aufgabe für den Nachmittag“

  1. Avatar von Cappellmeister

    HAVING AVG(SUPERID)
    Der Durchschnitt des höchsten und Niedrigsten Wertes ist doch das Gleiche wie ein Durchschnitt über die kompette Tabelle. Oder täusch ich mich da? Oder willst du einen Median bilden?

  2. Avatar von Sebbi

    Wenn die Einträge jeweils „Aufenthaltszeiten“ wären, ja … aber in Datetime steht ein Datum. Darüber kann man keinen Durchschnitt bilden, so weit ich weiß.

    Dein Vorschlag würde eine Fehlermeldung produzieren. Und frei interpretiert (was du damit meinen könntest) würde es nur Zeilen zurückgeben, deren superid der durchschnittlichen superid entspricht. Und das auch nur, wenn man nach superid gruppieren würde … also netter Versuch, nächster! :-)

  3. Avatar von bonsay
    bonsay

    ja, da hast du teilweise recht Cappell, aber:
    Der Unterschied wird immer von der superid gebildet….
    Du musst jetzt einen Durchschnitt der unterschiede der verschiedenen superids nehmen.

  4. Avatar von bonsay
    bonsay

    Oh, habe gerade deine erste zeile ueberlesen, andi… sorry.

  5. Avatar von Sebbi

    SELECT AVG(difftime) FROM (SELECT superid, (max(datetime)-min(datetime)) as difftime FROM tab GROUP BY superid)
    wäre eine Lösung … ist aber nicht erlaubt, da Subquery und mein Plugin soll ohne Mysql 4.x Funktionen auskommen!

  6. Avatar von Sebbi

    Ich brauch wirklich eine Funktion: „Es befinden sich gerade 6 User auf der Seite, davon bekannt sind Sebbi, Cappellmeister, bonsay“ … Grüße an euch Arbeitsverweigerer … der eine bei Siemens, der andere bei Publicis … und ich hock genau dazwischen bei t3 :-) …

  7. Avatar von Cappellmeister

    Sebbi, wir beide könnten eigentlich auch mal wieder unser Büchsentelefon auspacken.. so weit ist das ja gar nicht. besonders wo ich doch jetzt direkt unten an der Ecke sitze :)

  8. Avatar von bonsay
    bonsay

    Eine kleine Beschreibung dazu steht z.B. hier.

    Aber das reicht noch nicht ganz, glaube ich. Bin nicht zuhause, sonst würde ich in der letzten SP2 Aufgabe nachschauen. Da haben wir was gemacht, was uns hier helfen könnte, glaube ich…. ;)

  9. Avatar von bonsay
    bonsay

    Ja, mal solche 10 km billig walki-talkies hätten schon was, dann könnte ich auch noch mitquatschen ;)

  10. Avatar von Sebbi

    Eine WLAN-Verbindung müsste doch rein theoretisch klappen, oder? Adhoc? Wenn ich mich auf unsere Terasse hocke … hmm

    @Bonsay: der Link ist schon mal nicht schlecht, allerdings klappt es mit Joins meiner Meinung nach nicht. Momentan geb ich halt alle difftime-dinger aus und rechne im Skript den Durchschnitt aus. Das dauert aber ewig und frisst Speicher ohne Ende, wenn die Tabelle erstmal etwas größer ist …

  11. Avatar von Cappellmeister

    ganz blöde Frage, aber wofür brauchst du da überhaupt nen Durchschnitt der Zeit?

  12. Avatar von Sebbi

    Um anzuzeigen wie lange die Besucher durchschnittlich auf einer Seite verweilen :-) …

  13. Avatar von fraaaannnGRAAAOOAAARR!!
    fraaaannnGRAAAOOAAARR!!

    Wie wär’s wenn du nen temporären view benutzt? kostet halt aweng zeit, aber zu kiritisch wie bei den inselstats ist das ja net…
    oder kann myFsql <4.0 nichtmal views?

  14. Avatar von Cappellmeister

    Nee, also ich finde die durchschnittliche Verweildauer ist nichts, was man ständig aufs neue berechnen und ausgeben sollte. Das ist höchstens was, was man sich einmal in den Stats anschaut. Blöd, dass MySQL solche states nicht unterstützt, aber warum sollte man das auf Kosten der Serverleistung gebrauchen?

  15. Avatar von Sebbi

    Mysql unterstützt keine Views! Mann kann temporäre Tabellen erzeugen, aber das ist im Prinzip der gleiche Aufwand wie es im Skript selbst zu berechnen.

    @Andy: ja … vielleicht mache ich die „ich-brauche-2-oder-mehr-sekunden-statistiken“ auf eine extra unterseite. Mysql würde es ja unterstützen, allerdings nicht in einer Prä-4.0 Version. Da viele Provider noch 3.x einsetzen, ist mir sehr daran gelegen nichts inkompatibles zu schreiben …

  16. Avatar von Frankiöööögrööööölllll
    Frankiöööögrööööölllll

    hahahahaha….. mysuql suqt :)

  17. Avatar von Plasma

    Wo ist denn da der Subquery? Das Wörtchen AS ist schon ewig in SQL, ein Subquery ist wenn du ein komplettes SELECT einklammerst und zusätzlich benutzt. Und warum keine 4er Features? Die 5.0 ist in der Beta und bald kannst du dir aussuchen was für eine Datenbank zu benutzen willst :-P

  18. Avatar von Sebbi

    Dazu bitte Kommentar Nummer 5 lesen. Da ist die Query, die zwar mit Mysql 4.1+ funktioniert, aber nicht mit 3.x … soll sie aber, da wohl scheinbar doch noch recht viele Hoster die alte Version einsetzen. Wegen einer einzigen Query potentielle Benutzer zu vergraulen ist kein guter Stil :-)

    Was ich dabei für eine Datenbank verwende ist letztendlich egal. Der Spruch „Bei mir läuft’s, pech gehabt ihr anderen“ ist auch kein guter Stil :-)

  19. Avatar von Plasma

    Narf … das Ding aus der 5 funzt unter 3.x nicht? Wär mir neu dass sowas nicht gehen würde, selbst in den alten Versionen.

  20. Avatar von Sebbi

    http://dev.mysql.com/doc/mysql/en/Subqueries.html
    Ab Version 4.1 … darunter kommt #1064 – You have an error in your SQL syntax near ‚SELECT …