2017-01-23 2 views
1

의 최대 값과 행의 찾기, 컬럼의 경우 I는 다음과 같다 테이블이 . 그래서 내 예상 결과는 다음과 같아야합니다SQL :</p> <p><img src="https://i.stack.imgur.com/BTmCn.png" alt="Table To SELECT from"></p> <p>내가 각 ID에 대한 피드백에서 가장 큰 값을 갖는 행을 얻으려면 : 각이 2 열

Wanted Result

나는이 할 시도했다 :

SELECT id, course_number, rate_average, max(feedbacks) 
FROM [Table] 
GROUP BY id; 

을 그리고 ID 당 하나 개의 행을 받고 있어요하지만 행은 포함되어 있지 않습니다 원본 테이블에서 오른쪽 행의 데이터.

아, 저는 mysql을 사용하고 있습니다.

select t.* 
from your_table t 
inner join (
    select 
     id, max(feedbacks) feedbacks 
    from your_table 
    group by id 
) t2 on t.id = t2.id and t.feedbacks = t2.feedbacks; 

그것은 ID와 최대 피드백을 발견하고 관련 행을 얻기 위해 원래의 테이블을 조인

+1

MySQL의 또는 SQL Server? – GurV

+0

@ GurV SQL 서버 태그 – Lamak

답변

2

이보십시오.

동일한 ID와 피드백을 가진 행이 여러 개인 경우 모든 행이 반환됩니다.

+0

을 제거했습니다. 귀하가 해결했다고 생각합니다. 하지만 여기서 t2는 무엇을 의미합니까? – yoni

+0

테이블 또는이 경우 하위 쿼리의 별칭입니다. – GurV

+0

굉장합니다. 알았다. 그것은 작동합니다. 감사. – yoni

0

id 당 한 행을 원할 경우 "집계"가 아니라 "필터"라고 생각하십시오.

select t.* 
from t 
where t.feedbacks = (select max(t2.feedbacks) 
        from t t2 
        where t2.id = t.id 
        ); 

참고 : 한 가지 방법은 상관 하위 쿼리입니다 여러 행이 동일한 최대를 가지고 있다면,이 아이디에 대한 모든 행을 반환합니다. 이것이 문제인 경우 다른 질문을하고이 경우 반환 할 항목을 지정해야합니다.

0

id 행 번호 그룹을 feedbacks 열의 내림차순으로 추가하여이 작업을 수행 할 수도 있습니다.

쿼리

select t1.``id`, t1.`course_number`, t1.`rate_average`, t1.`feedbacks` from 
(
    select `id`, `course_number`, `rate_average`, `feedbacks`, 
    (
     case `id` when @curA 
     then @curRow := @curRow + 1 
     else @curRow := 1 and @curA := `id` end 
    ) as `rn` 
    from `your_table_name` t, 
    (select @curRow := 0, @curA := '') r 
    order by `id`, `feedbacks` desc 
)t1 
where t1.`rn` = 1;