2016-05-20 80 views
1

Ich möchte einen Bericht erstellen, der die durchschnittliche Note für verschiedene Aufgaben zeigen wird.SQL: Wählen Sie Durchschnitt von Varchar

Ich habe Probleme mit dem Durchschnitt zu bekommen. Ich muss herausfinden, wie man die Grade in Floats umwandelt, so dass ich die Durchschnittswerte nehmen kann. Die Noten haben manchmal nicht-numerische oder Null-Werte, obwohl die meisten Werte wie "2.0" oder "3.5" aussehen. Ich kann alles ausschließen, was nicht numerisch ist. Diese

ist das, was ich bisher:

Select 
GradingScores.task As task, 
Avg(Cast((SELECT GradingScores.score WHERE GradingScores.score LIKE '%[^0-9]%')As float)) As averages 
From 
GradingScores 

I FlySpeed ​​SQL Query verwenden.

+0

Welches DBMS benutzt du? ''% [^ 0-9]%'' ist kein korrekter Platzhalterausdruck in (Standard) SQL –

+0

Er ist gültig für SQL Server, obwohl –

+0

Wir verwenden SQL Server –

Antwort

1

Sie könnten versuchen, mit IsNumeric

Select 
GradingScores.task As task, 
Avg(Cast(GradingScores.score as float) As averages 
From 
GradingScores where IsNumeric(GradingScores.score) = 1 
+0

Vielen Dank! Das hat funktioniert. Das einzige Problem, das ich jetzt habe, ist, wie man den Durchschnitt für die Aufgaben "Verantwortung" und "Zusammenarbeit" zeigt. Das Problem ist, dass die Daten nicht sauber sind und ich die Daten nicht ändern kann. Zum Beispiel sehen meine Ergebnisse so aus: "Verantwortung", 3.0 "Verantwortung in der Gitarre", 4.0 "Verantwortung in der Mathematik", 3.4 "Zusammenarbeit in Mathe "2.4, Kollaboration in der Musik", 3.0. Ich brauche einen Durchschnitt aller Verantwortungsgrade und aller Kollaborationsnoten, also sollte ich nur zwei Ergebnisse bekommen. –

1

Einfach nur konvertieren() und verwenden IsNumeric() Funktion in T-SQL

select avg(convert(float,score)) 
from GradingScores 
where isnumeric(score)=1 
0

hier ist was für mich gearbeitet:

SELECT AVG(CAST(columnName AS FLOAT)) FROM tableName;