Heim >Datenbank >MySQL-Tutorial >Wie kann ich Notenprozentsätze in SQL berechnen, ohne alle möglichen Noten vorab zu definieren?
Prozentsatz in einer SQL-Anweisung berechnen
Frage:
Eine SQL Server-Tabelle enthält Benutzer Namen und ihre Noten. Wie kann eine einzelne SQL-Anweisung die Prozentsätze aller möglichen Notenwerte (z. B. A, B, C) berechnen? Ist es darüber hinaus möglich, dies zu erreichen, ohne alle möglichen Noten explizit zu definieren, wenn man bedenkt, dass Benutzer offene Antworten wie „bestanden/nicht bestanden“ oder „keine“ eingeben können?
Antwort:
Option 1: Verwendung von over()
select Grade, count(*) * 100.0 / sum(count(*)) over() from MyTable group by Grade
Diese Lösung ist die effizienteste und nutzt die Funktion over().
Option 2: Universal (Jede SQL-Version)
select Grade, count(*) * 100.0 / (select count(*) from MyTable) from MyTable group by Grade;
Diese Option funktioniert für jede SQL-Version, ist jedoch möglicherweise weniger effizient als der vorherige.
Option 3: Mit CTE (Mindestens Effizient)
with t(Grade, GradeCount) as ( select Grade, count(*) from MyTable group by Grade ) select Grade, GradeCount * 100.0/(select sum(GradeCount) from t) from t;
Diese Methode bietet zwar eine flexible Lösung, ist aber am wenigsten effizient.
Das obige ist der detaillierte Inhalt vonWie kann ich Notenprozentsätze in SQL berechnen, ohne alle möglichen Noten vorab zu definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!