2013-03-08 2 views
23

SQL 문에서 최소 값으로 행을 가져 오려고합니다. 나는 point 열에서 최소 값을 가지고있는 ID를 선택하려면 어떻게최소값으로 고유 한 행을 선택하는 SQL 쿼리

id game point 
1 x  5 
1 z  4 
2 y  6 
3 x  2 
3 y  5 
3 z  8 

, 게임별로 그룹화 :

이 테이블을 고려? 이처럼 :

id game point  
1 z  4 
2 y  6 
3 x  2 
+0

원하는 결과를 얻으려면 동일한 테이블에 가입해야합니다. 대답에서 아래의 쿼리를 확인하십시오. –

+4

왜 결과가 5가 아닌 게임 "y"포인트 값이 6입니까? – billynoah

+1

OP가 응답하지 않았으므로 "id로 그룹화"를 요청하고 가장 낮은 점수를 가진 게임이 무엇인지 보여줄 수 있습니다. –

답변

30

사용하여 작동합니다

Select tbl.* From TableName tbl 
Inner Join 
(
    Select Id,MIN(Point) MinPoint From TableName Group By Id 
)tbl1 
On tbl1.id=tbl.id 
Where tbl1.MinPoint=tbl.Point 
+0

정확히 ..! 감사합니다 – balaji

+0

Microsoft Access에서 SQL로 작성할 때 단일 내부 조인을 수행 할 수 있습니까 ?? – KSM

+4

unneccessary complecation ID 번호, 게임, MIN (포인트) GROUP BY GROUP BY ID 게임, 게임 –

-3

시도 :

select id, game, min(point) from t 
group by id 
+1

"student.point '열이 잘못되었습니다. HAVING 절에 집계 함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에. " – balaji

+0

지금 시도해보십시오. – www

+0

같은 오류가 발생했습니다. 나는 MS SQL – balaji

10

select * from table 
where (id,point) IN (select id,min(point) from table group by id); 
+0

어떤 rdbms를 사용하고 있습니까? – Aspirant

+0

나는 MS SQL – balaji

+1

을 사용하고 있습니다. 오 !! 나는 MySQL에 대해 몰라 ... 쿼리는 오라클에서 작동합니다 하위 쿼리의 다중 열 수표입니다. – Aspirant

0

Ken Clark's answer 내 경우에는 작동하지 않았다. 그것은 당신 중 하나에서 작동하지 않을 수도 있습니다. 이것은 sql에만 사용하고 다음 ANSI SQL 태그됨에 따라

SELECT * 
from table T 

INNER JOIN 
    (
    select id, MIN(point) MinPoint 
    from table T 
    group by AccountId 
) NewT on T.id = NewT.id and T.point = NewT.MinPoint 

ORDER BY game desc 
0
SELECT * from room 
INNER JOIN 
    (
    select DISTINCT hotelNo, MIN(price) MinPrice 
    from room 
Group by hotelNo 
) NewT 
on room.hotelNo = NewT.hotelNo and room.price = NewT.MinPrice; 
+2

이 코드가 질문에 대한 대답에 대한 간단한 설명은이 대답을 크게 향상시킬 것입니다. – jmoreno

7

을하고 window function :되지 않은 경우,이 시도

select id, game, point 
from (
    select id, game, point, 
     row_number() over (partition by game order by point) as rn 
    from games 
) t 
where rn = 1; 
8

이 같은 일을하는 또 다른 방법입니다 , 당신이 상위 5 위닝 게임 등을 선택하는 것과 같은 흥미로운 일을 할 수있게 해줍니다.

SELECT * 
FROM 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, * 
    FROM Table 
) X 
WHERE RowNum = 1 

이제 점수가 가장 낮은 것으로 확인 된 실제 행을 올바르게 가져올 수 있으며 "가장 작은 점수를 가진 가장 빠른 게임을 보여 줘"등과 같이 여러 기준을 사용하도록 순서 기능을 수정할 수 있습니다.

+0

멋지고 짧습니다. 창 기능을 이용합니다. – absurd

관련 문제