2016-05-20 2 views
1

Je voudrais faire un rapport qui montrera la note moyenne pour différentes tâches.SQL: sélectionnez la moyenne de varchar

J'ai des difficultés à obtenir les moyennes. J'ai besoin de comprendre comment convertir les notes en flotteurs afin que je puisse prendre les moyennes. Les notes ont parfois des valeurs non numériques ou nulles, bien que la plupart des valeurs ressemblent à "2.0" ou "3.5". Je peux exclure tout ce qui n'est pas numérique.

C'est ce que j'ai jusqu'à présent:

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

J'utilise FlySpeed ​​requête SQL.

+0

Quel SGBD utilisez-vous? ''% [^ 0-9]%'' n'est pas une expression générique correcte dans (standard) SQL –

+0

Il est valide pour le serveur SQL, bien que –

+0

Nous utilisons SQL Server –

Répondre

1

Vous pouvez essayer d'utiliser IsNumeric

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

Merci! Cela a fonctionné. Le seul problème que j'ai maintenant est comment montrer la moyenne pour les tâches 'responsabilité' et 'collaboration'. Le problème est que les données ne sont pas propres et je ne peux pas changer les données. Par exemple, mes résultats ressemblent à: "Responsabilité", 3.0 "Responsabilité en guitare", 4.0 "Responsabilité en mathématiques", 3.4 "Collaboration en Math "2.4," Collaboration dans la musique ", 3.0. J'ai besoin d'une moyenne de toutes les notes de responsabilité et de toutes les notes de collaboration, donc je devrais juste obtenir deux résultats. –

1

Tout simplement convertir() et utiliser IsNumeric() dans T-SQL

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

est ici ce qui a fonctionné pour moi:

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