2013-03-20 2 views
4

mysql 데이터베이스를 사용하고 있습니다. 나는 다섯 개 값 ", 매우 잘함, 우수 양호, 불량 및 한심"Mysql : 문자열 값에 정수 값을 할당하고 평균값을 얻으십시오.

내가이 평균을 줄 것이다 쿼리를 작성하려는에서 하나 개의 값을 가질 수있다 을 howIsTraining 필드가있는 테이블라는 의견이 I는 = 5 매우 좋음

우수한 값의 각각의 정수 값을 제공 할 포맷을

다음의 모든 데이터로부터 값 = 4 좋음 = 3 나쁨 = 2 한심 = 1

는 마침내 ((5 + 4 + 5 + 3 + 2)/5) = 3.8

수단 불량 테이블 매우 우수 우수 우수, 양호 다섯 개 레코드를 가지고 있다고한다면 결과는 다음과 같습니다 : 3.8

답변

4
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

하지만

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

을 그럼 당신은 이와 같은 쿼리를 할 것이다 정말로는 더 나은 디자인을 고안해야한다고 생각합니다. n (예를 들어. 잭에 의해 표시)

0

1에서 5까지의 값을 갖는 데이터베이스에 정수 열을 갖는 것이 더 합리적이지 않습니까? 그런 다음 데이터를 나타낼 때 숫자를 문자열로 변환 하시겠습니까?

극단적 인 경우 추가 정수 열을 추가하고 UPDATE ... SET grade = 1에 의해 올바른 등급 값으로 채 웁니다. 여기서 hoIsTraing = 'Pathetic'입니다.

+0

이미 그 값을 가지고 .. 그 형식 자체에 그 값을 원한다면 ... – maaz

+1

모든 것은 변경할 수 있습니다. – Riho

+0

하지만 그 값 자체가 그 형식으로 남아 있기를 바란다. mysql에서 위와 같이 할 수 없다 ...? – maaz

1

당신이 점수를 유지 다른 테이블이 가정 :

SELECT AVG(scores.value) 
FROM feedback 
INNER JOIN scores ON term = howIsTraining; 
+0

그 단일 테이블에서 가능하지 않습니다. 즉 다른 테이블이 없습니까? – maaz

+0

@maaz 네, 그걸 위해서'CASE'를 사용할 수 있습니다. 그러나 당신은 이미 분리 된 테이블을 가지고 있다고 생각했습니다; 사실, 당신이 참조 무결성을 사용할 수 있도록 그것을 권하고 싶습니다 :) –

관련 문제