Wie löst man die folgende SQL Abfrage?
4 Antworten
Es gibt verschiedene Möglichkeiten:
SELECT DISTINCT Kunde.Name, Kunde.PaybackPunkte, Kunde.PaybackPunkte/COUNT(Kunde.id) as Durchschnitt FROM Kunde WHERE Durchschnitt<Kunde.PaybackPunkte ORDER BY Kunde.Name;
SELECT DISTINCT Name FROM
(
SELECT k.Name as Name, k.PaybackPunkte as PunkteKunde, k1.PaybackPunkte AS PunkteMax
FROM Kunde k
LEFT OUTER JOIN Kunde k1 ON k1.Name = 'Maximilian Durchschnittsbürger'
) tmp
WHERE PunkteKunde > PunkteMax
SELECT DISTINCT Name
FROM Kunde k
WHERE k.PaybackPunkte > (SELECT TOP 1 PaybackPunkte FROM Kunde k1 WHERE k1.Name = 'Maximilian Durchschnittsbürger')
Guck dir seine Antworten an. Er liest sie von anderen Leuten und antwortet dann, indem er so tut, als wüsste er es... Traurig trifft es wohl eher als mutig. ^^'
Ich wundere mich über die Frage, denn es können ja (wie man auch am Datenmodell sieht) explizit unterschiedliche Personen mit demselben Namen vorkommen. Aber gut. Das folgende würde vermutlich in T-SQL klappen (habe es nicht probiert), aber sollte sich entsprechend auch auf andere Dialekte übertragen lassen:
SELECT DISTINCT Name
FROM Kunde k
WHERE k.PaybackPunkte > (SELECT TOP 1 PaybackPunkte FROM Kunde k1 WHERE k1.Name = 'Maximilian Durchschnittsbürger')
Das ist die "Straight-Forward-Lösung". Eine andere wäre:
SELECT DISTINCT Name FROM
(
SELECT k.Name as Name, k.PaybackPunkte as PunkteKunde, k1.PaybackPunkte AS PunkteMax
FROM Kunde k
LEFT OUTER JOIN Kunde k1 ON k1.Name = 'Maximilian Durchschnittsbürger'
) tmp
WHERE PunkteKunde > PunkteMax
Das erzeugt eine temporäre Tabelle mit drei Spalten: Dem Namen des Kunden, seinen Punkten und den Punkten von Maximilian. Aus dieser Zwischentabelle liefert es die Namen, deren Punktzahl größer ist.
SELECT DISTINCT Kunde.Name, Kunde.PaybackPunkte, Kunde.PaybackPunkte/COUNT(Kunde.id) as Durchschnitt FROM Kunde WHERE Durchschnitt<Kunde.PaybackPunkte ORDER BY Kunde.Name;
Ich denke ich habe es gelöst... Konnte es natürlich nicht austesten, also sind eventuell kleine Fehler drinn... Aber korrigiert mich gerne, wenn euch was auffällt.
Ups, stimmt, es guckt welche Personen überdurchschnittlich viele Payback Punkte haben... Hab dann wohl die Frage nicht ganz genau gelesen xD
SELECT Kunde.Name FROM Kunde WHERE Kunde.PaybackPunkte > (SELECT Kunde.PaybackPunkte FROM Kunde WHERE Kunde.Name = "Maximilian Durchschnittsbürger")
Ein Graus die Tabelle. Verstößt bereits gegen die 1. NF.
Da es eine Kundentabelle ist, dürfte das Einmal auftauchen eigentlich gar kein Faktor sein...
Wow, echt jetzt? Du kopierst nicht nur meine Lösung, sondern auch noch die falsche Lösung von lateinfreak und gibst das als eigene Antwort aus? Das ist nun wirklich mutig...