Q&A

  • 여러개의 데이터중 가장 큰 값의 레코드를 구별하는 방법
DB는 현재 MDB, MSSQL 에서 테스트 해보고 있습니다.

사람        값        비고  
A        10        1
A        11        1
B        5        1
B        10        0
C        10        1
C        20        1


각 사람마다 가장 큰 값이 비고1인 데이터 리스트를 가져오고 싶습니다.

결과
A        11        1
B        5        1
C        20        1


select * from temp
where (값 = (select max(값)  from temp)) and (비고 = 1)

이렇게 하면 레코드가 많은 경우 너무 오래 걸리네요. 좋은 방법 좀 알려주세요.

조인을 이용하는 방법도 있다는데 에러가 나네요.
4  COMMENTS
  • Profile
    김병윤 2009.03.21 08:06
    좋은방법 갈켜주면 맛난거 사주시나요? ㅎㅎ

    그냥 그룹바이 쓰면 될 듯한데요

    select 사람, max(값), 비고 from temp
    where 비고 = 1
    group by 사람, 비고

    요런식으로..차암~쉽죠잉~^^
  • Profile
    김홍균 2009.03.23 21:15
    김병윤님 감사합니다. 왜 group by 안된다고 했을까 보니... 비고 값이 0..9까지 쭈욱 있고 거기에서 아무렇게나 가져오는 거였네요.
    즉, 1빼고 나머지 중에 가장 큰 값... 이런것도 있고..
    그래서 group by 쓰면 비고 별로 쭈욱 나와서 안 쓰고 서브쿼리이용해보려고 했던거지요.
    시간이 많이 걸려서 헤메고 있는 중이에요. ㅋㅋ
  • Profile
    임대순 2009.03.24 01:04
    그러 maxkeyvalue 값을 써보세요..저두 예전에 이와같은 문제와 비슷한적이 있어서요..

    select max(필드명) maxkeyvalue from 테이블명

    이렇게 해서 가장 큰값을 구한 후 if 비고=1 then maxkeyvalue값만 출력 하시면 될꺼 같은데요...
    그럼 즐코 하세요..
  • Profile
    김병윤 2009.03.24 17:55
    음 정확히 어떤것을 구현하시려는건지 이해가 좀 안되기는 하는데


    select * from (select 사람, Max(값) as 최대값 from temp group by 사람) m left outer join temp s
    on(m.사람 = s.사람 and m.최대값= s.값)

    이런식으로 사용하시면 결과가 ... (비고랑 상관없이 최대값)
    사람 값 비고
    A 11 1
    B 10 0
    C 20 1



    select * from (select 사람, Max(값) as 최대값 from temp where 비고=1 group by 사람) m left outer join temp s
    on(m.사람 = s.사람 and m.최대값= s.값)

    이런식으로 사용하시면 결과가 ... (비고=1인 최대값)
    사람 값 비고
    A 11 1
    B 5 1
    C 20 1

    음하하~~서브쿼리, 조인, 그룹바이 3종셋트네요(꼭 그룹바이 쓰고 싶었어요 흑흑 ㅠ.ㅠㅋ)
    하시려는 일에 도움이 되셨으면 하네요
    그럼 전 이만 WBC[결승] 한국vs일본 감상하러 ^^ 슝~~!!