Abfrage abhängig vom Zwischenergebnis

ThKr

Grünschnabel
Hallo,
ich habe mir ein e Tabelle in miner MYSQL-Datenbank mit folgenden Spalten.
id = eindeutiger ID jedes Datensatzes
mnr = Mitgliednummer
punkte = erreichte Ergebnis

Nun benötige ich eine Abfrage nach folgendem Muster.

Eine sortierte Liste sortiert nach, dem besten Durchscnitt der besten 5 Ergebnisse eines Mitgliedes.
idmnrpunkte
111110
22228
322210
422210
51118
61112
73333
83333
93333
1033323
1111111
1222244
1311133
14222123
1522214
1622244
1711133
18222123
1922214

Das Ergebnis meiner Abfrage sollte dann wie folgt aussehen.

mnrDurchschnitt der besten 5 Ergebnisse
22269,6
11119
3336,4

Kann mir da jemand weiter helfen?
 
Zuletzt bearbeitet:
Moin ThKr,

ungetestet
SQL:
Select a.mnr
     , (Select Sum( punkte)/Count(punkte) 
         from (
           select b.punkte 
           from tabelle b
           where b.mnr = a.mnr
           order by punkte desc
           LIMIT 5
		   ) 
		) as Top5Schnitt
from Tabelle a
order by 2 desc

Grüße
Biber
 
@Biber3: MySQL kann sogar schon AVG() :p

Und warum ORDER BY 2?
Ansonsten sieht mir das ganz unktionsfähig aus.
 
Moin alxy,
@Biber3: MySQL kann sogar schon AVG() :p
Aber ich nicht - kenne doch mySQL nur aus Kreuzworträtseln ;-)

Meinetwegen aber gerne statt "Sum(punkte)/Count(punkte)" ein "Avg(punkte)".

Und warum ORDER BY 2?

Sortiert nach der 2. Spalte des Resultsets (Punkte) absteigend.
So würde ich eine TopX-Liste jedenfalls erwarten.

Ansonsten sieht mir das ganz unktionsfähig aus.
Wer wird denn gleich unken :p

Grüße
Biber
 
Hi,

das mit dem ORDER BY 2 wuste ich wiederum nicht :D Ich dachte es geht nur, indem man die Spalte beim Namen nennt("ORDER BY Top5Schnitt")
 
Hallo,
danke für die schnelle Antwort. Ich bin aber in mySQL noch nicht so erfahren. Warum gibt es in dem Script eine tabelle A und eine tabelle B? Ich habe doch nur die eine Tabelle.
 
Handelt sich um die selbe Tabelle, nur der Alias ist anders. (Tausche "table" jeweils durch deinen Tabellennamen aus.)
 
Ich habe es jetzt probiert. Mein Code sieht dabei dann so aus.

Code:
 SELECT a.mnr, (

SELECT SUM( punkte ) / COUNT( punkte )
FROM (

SELECT b.punkte
FROM vl_ergebnisse b
WHERE b.mnr = a.mnr
ORDER BY punkte DESC
LIMIT 5
)
) AS Top5Schnitt
FROM vl_ergebnisse a
ORDER BY 2 DESC

Ich erhalte dabei immer diese Fehlermeldung und weiß damit nichts anzufangen.

MySQL meldet:
#1248 - Every derived table must have its own alias
 
Moin ThKr,

Jetzt nochmal mit Alxys und Yaslaws Korrekturen und mit deinem Tabellennamen in einem Stück:
SQL:
SELECT a.mnr, (
   SELECT AVG( punkte ) 
   FROM ( 
         SELECT b.punkte
         FROM vl_ergebnisse b
        WHERE b.mnr = a.mnr
        ORDER BY punkte DESC
        LIMIT 5
       ) as whatever
    )  AS Top5Schnitt
FROM vl_ergebnisse a
ORDER BY 2 DESC

Grüße
Biber
 

Neue Beiträge

Zurück