2016-09-07 4 views
0

가정하는 I는 표 가지고선택 "그룹"동일한 열 값의 행 (1 개 이상)

id  | column1 | column2 
--------+---------+---------- 
1  | 3  | 1 
2  | 5  | 1 
3  | 6  | 2 
4  | 5  | 2 
5  | 1  | 3 
6  | 7  | 3 
7  | 7  | 3 
8  | 2  | 3 
9  | 5  | 3 
10  | 7  | 4 

(2 열 편의상 정렬되어, 행은 실제 테이블에서의 순서가 아닌)

2 번 열에서 같은 값을 가진 행의 "그룹"을 어떻게 선택합니까? 반드시 1 이상을 반환하지 않아야합니다. 임의적으로 좋지만 다른 열에서도 정렬 할 수 있으면 더 좋습니다.

내가 자신을 명확하게하고 있지 않다 경우는,이 ​​내가 그것을 반환 할 것입니다 :

id  | column1 | column2 
--------+---------+---------- 
1  | 3  | 1 
2  | 5  | 1 

또는

id  | column1 | column2 
--------+---------+---------- 
3  | 6  | 2 
4  | 5  | 2 

또는

id  | column1 | column2 
--------+---------+---------- 
10  | 7  | 4 

또는 ...

(등)

그래서 먼저 r 열 2의 값이 1 인 행을 모두 계산 한 다음 삭제하면 2 열의 값이 2 인 모든 행을 반환해야합니다.

간결함을 위해 column2는 정수이며 특정 값을 제공하지 않으려는 경우 column2는 모든 값을 가질 수 있습니다. 이 작업을 수행하기 위해 생각할 수있는 유일한 방법은 다음 두 쿼리를 사용하는 것입니다.

첫 번째 SELECT column2 FROM test_table GROUP BY column2 첫 번째 SELECT column2 FROM test_table GROUP BY column2은 모든 고유 한 column2 값을 가져오고 각 column2 값은 SELECT * FROM test_table WHERE column2=value입니다.

동일한 결과를 얻으려면 더 효율적인/간단한/단일 쿼리 방법이 있습니까?

답변

2

내가 제대로 질문을 이해하고있어, 여기 min와 하위 쿼리를 사용하여 하나 개의 옵션이다 :

select t.* 
from test_table t join (
    select min(column2) column2 
    from test_table 
    ) t2 on t.column2 = t2.column2 
+0

이 번호 레코드를 찾을 수 그러나 불행히도 실제 테이블에서 column2는 숫자가 아닙니다. 나는 아마 그것을 언급 했어야하고 다른 열 (이것은 숫자가 아니기도 함)로 정렬하고 싶었지만 예제를 단순화하고 싶었고 중요하지 않다고 생각했다. 죄송합니다. 질문을 수정하겠습니다. 어떻게 든 주문을 통해 분을 약간 변경할 수 있습니까? – alexk745

+0

Nevermind, 방금 min (column2)을 min (any-column-i-want)으로 바꿀 수 있다는 것을 알았습니다. 시간 내 주셔서 감사합니다, 나는 대답을 수락 할 것입니다! – alexk745

1
select * from yourtable 
where column2 = (select column2 from yourtable 
       order by column2 limit 1) 

이 2 열에서 가장 작은 수를 찾아이 잘 작동