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*
Kommentare
20 Antworten zu „Aufgabe für den Nachmittag“
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?
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! :-)
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.
Oh, habe gerade deine erste zeile ueberlesen, andi… sorry.
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!
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 :-) …
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 :)
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…. ;)
Ja, mal solche 10 km billig walki-talkies hätten schon was, dann könnte ich auch noch mitquatschen ;)
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 …
ganz blöde Frage, aber wofür brauchst du da überhaupt nen Durchschnitt der Zeit?
Um anzuzeigen wie lange die Besucher durchschnittlich auf einer Seite verweilen :-) …
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?
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?
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 …
hahahahaha….. mysuql suqt :)
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
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 :-)
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.
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 …