4

私はmysqlデータベースを使用しています。 「Excellent、Very Good、Good、Poor、Pathetic」の5つの値のうち1つの値を持つ可能性のあるフィールドhowIsTrainingを持つfeedbackというテーブルがあります。

次の形式ですべてのデータからこの値の平均を与えるクエリを書きたい

それぞれの値に整数値を与えたい

非常に良い=5非常に良い=4良い=3悪い=2哀れな=1

テーブルに5つのレコードがあるとすると、Excellent、Very Good、Excellent、Good、Poor、つまり((5 + 4 + 5 + 3 + 2)/ 5)= 3.8

最終的には3.8の結果になります

4

3 に答える 3

5
select avg(case howIsTraining
             when 'Excellent' then 5
             when 'Very Good' then 4
             when 'Good' then 3
             when 'Poor' then 2
             when 'Pathetic' then 1
             else null
           end) as avg_rating
from feedback 

SQLFiddle:http ://sqlfiddle.com/#!2/14a06/1

しかし、あなたは本当により良いデザインについて考える必要があります(例えばジャックによって示されるように)

于 2013-03-20T13:13:54.097 に答える
1

スコアを保持する別のテーブルがあると仮定します。

scores
----------+------
term      | value
----------+------
Excellent | 5
Very Good | 4
...

次に、次のようなクエリがあります。

SELECT AVG(scores.value)
FROM feedback
INNER JOIN scores ON term = howIsTraining;
于 2013-03-20T13:10:57.240 に答える
0

データベースに1から5までの値を持つ整数列がある方が理にかなっているのではないでしょうか。次に、データを表すときに、数値を文字列に変換しますか?

極端な場合は、整数列を追加し、UPDATE ... SET grade = 1(hoIsTraing ='Pathetic')によって正しいグレード値を入力します。

于 2013-03-20T13:07:02.230 に答える