2014-12-01 4 views
-3

예를 들어 나는 아래와 같이 "Info"테이블을 가지고 있습니다.조건 기반 SQL 쿼리 선택

+--------+------------+------+------------+ 
| Entity | Department | Code | Code_count | 
+--------+------------+------+------------+ 
| E1  | D1   | 123 |   5 | 
| E1  | D1   | 234 |   10 | 
| E1  | D1   | 345 |   20 | 
| E1  | D2   | 456 |   2 | 
| E1  | D2   | 567 |   5 | 
| E1  | D2   | 678 |   10 | 
+--------+------------+------+------------+ 

내 쿼리는 다음과 같이 작동합니다 : 각 EntityDepartment 쌍의 maximum code count있는 code을 선택합니다.

도움이 될 것입니다. 감사.

답변

0
select t1.* 
from your_table t1 
join 
(
    select entity, department, max(Code_count) as Code_count 
    from your_table 
    group by entity, department 
) t2 on t1.entity = t2.entity 
    and t1.department = t2.department 
    and t1.Code_count = t2.Code_count 
+2

안녕하세요. 문제가 해결 될 수도 있지만 답변을 수정하고 작동 방법과 이유에 대해 약간의 설명을 해주시면 좋습니다. 잊지 마세요 .- 힙이 있습니다. Stack overflow에 대한 초보자들에 대해서, 그들은 당신의 전문 지식으로부터 한두 가지를 배울 수 있습니다 - 당신에게 명백한 것은 그들에게 그렇게 좋지 않을 수도 있습니다. –

+0

답변 해 주셔서 감사합니다! – Sam

0

이 당신을 위해 작동합니다 :

SELECT ENTITY, DEPARTMENT, CODE 
FROM TABLE 
WHERE CODE_COUNT IN (
    SELECT MAX(CODE_COUNT) FROM TABLE GROUP BY ENTITY, DEPARTMENT) 

SQL 바이올린을 : http://sqlfiddle.com/#!2/482397/12

0

사용 Window Function을 결과를 얻을 수 있습니다.

SELECT Row_number()OVER(
         partition BY Entity, Department 
         ORDER BY Code_count DESC) RN, 
        * 
      FROM table_name 

partition BY 쿼리 결과 집합을 파티션으로 나눕니다. 창 함수는 각 파티션에 개별적으로 적용되며 각 파티션에 대한 계산이 다시 시작됩니다.

SELECT Entity, 
     Department, 
     Code, 
     Code_count 
FROM (SELECT Row_number()OVER(
        partition BY Entity, Department 
        ORDER BY Code_count DESC) RN, 
       * 
     FROM table_name) A 
WHERE rn = 1