2011-03-30 3 views
1

MySQL의 테이블에서 가장 높은 값을 찾는 방법 즉 난 MySQL의 테이블을 가지고

 
st_id | name | email | maths | chemistry | bio | social_study 
1  | john |@a.com | 20 | 23  | 10 | 15


내 질문에 내가 두 번째 마지막 그래서 모든 주제 분야는 지능을 가지고
주에서 가장 높은 과목 점수를 찾을 수있는 방법입니다 (11) 값

+0

안녕하세요 내 대답이 너무 – Harish

답변

5
같은 3 개 테이블에 데이터베이스를 브레이크

:

학생 :

st_id | name | email 
1  | john |@a.com 

코스 :

cr_id | name 
1  | maths 
2  | chemistry 
3  | bio 
4  | social_studies 

StudentCourses : 이제

st_id | cr_id | score 
1  | 1  | 20 
1  | 2  | 23 
1  | 3  | 10 
1  | 4  | 15 

당신은 할 수 있습니다 :

SELECT s.name, MAX(sc.score) FROM Students s INNER JOIN StudentCourses sc ON s.st_id = sc.st_id;

+0

가장 좋은 답을 확인이 될 수 있습니다. 이제 검색어를 변경하지 않고도 코스 목록을 빠르게 수정할 수 있습니다. 또한 'StudentCourses' 테이블에 타임 스탬프 필드를 추가하여 날짜 별 점수를 선택할 수 있습니다. – biakaveron

+0

@aroth가 수행 한 작업을 "정규화"라고합니다. –

1
SELECT * FROM <table> 
ORDER BY <field> DESC 
LIMIT <needed number of rows> 

예 :

SELECT * FROM <table> 
ORDER BY maths+chemistry+bio+social_study DESC 
LIMIT 3 
0

엄밀히 말하면 PHP 메소드 : 필드 이름과의 연관성을 유지하려고한다고 가정합니다. 이 경우 행을 배열로 가져온 것으로 가정 할 때 쿼리 결과의 각 행에 asort($row);을 사용하면됩니다. asort은 키를 유지하면서 배열을 가장 낮은 값에서 가장 높은 값으로 정렬합니다 (추가 플래그를 사용하여 결과를 조정할 수 있음). foreach 루프를 사용하면 정렬 된 순서로 각 키/값 쌍을 처리 할 수 ​​있습니다.

0
st_id | name | email | maths | chemistry | bio | social_study 

1  | john |@a.com | 20 | 23  | 10 | 15 

쿼리 맨 마크

SELECT id,GREATEST(mark,mark1,mark2) AS `top` FROM `students` 
관련 문제