2014-06-24 4 views
1

나는 이전에 질문을 올렸고 위대한 답을 얻었지만 잘못된 논리로 나의 논리에 대해 알게되었습니다. 이 같은 테이블을 감안할 때 : 나는 원래하지만최대/최소값을 가진 레코드에서 값 추출

Create TableA as (Select Name,Max(ValueA),Min(ValueA),Max(ValueB1,Max(ValueB2) Group by Name) 

로 결국 각각의 고유 한 이름의 최대/최소 값을 얻을려고

Name|ValueA|ValueB1|ValueB2 
Bob |  1| 200| 205 
Bob |  2| 500| 625 
Bob |  7| 450| 850 
Bob |  3| 644| 125 
Ann |  4| 120| 120 
Ann |  8| 451| 191 
Ann |  9| 145| 982 

이 (자연스럽게) 나에게 고/저를 준 A, B1, B2 각각에 대해

  • 밥 | 1 | 7 | 200 | 644 | 205 | 내가 찾던 850

가의 B1과 B2 값 고유 한 이름 당 최저 및 최고 값에서의 각각 1 | | 7 | 200 | 205 | 450 | 850

  • 앤 | 4 | 9 | 120 | 120 | 145 | 제가

    • 밥 원하는 위에서 환언 982

    은 높고 낮은 A 값과 높은 값과 낮은 값 레코드에 포함 된 값에 대해 B1과 B2를 제공합니다.

    (이것은 중복 질문이 아닙니다. 마지막 질문에서 특정 고유 이름에 대해 세 개의 다른 필드에 대해 높은 값과 낮은 값을 새 테이블로 가져 오는 방법에 대해 질문했지만 답변이 필요하지 않습니다. 첫 번째 질문은 성공적으로 답변되었습니다 (그리고 그와 같이 표시되었습니다.) 내가 필요한 것은 주어진 이름에 대한 다른 필드의 높은 값과 낮은 값의 두 필드 값입니다. 질문을 보면 이렇게 볼 수 있습니다. 솔루션은 다른 사실)

  • 답변

    1
    SELECT tmin.Name, tmin.ValueA, tmax.ValueA, 
        tmin.ValueB1, tmin.ValueB2, tmax.ValueB1, tmax.ValueB2 
    FROM (
        SELECT Name, MAX(ValueA) AS ValueAMax, MIN(ValueA) AS ValueAMin 
        FROM `foo` 
        GROUP BY Name 
    ) AS t 
    JOIN `foo` AS tmin ON t.Name = tmin.Name AND t.ValueAMin = tmin.ValueA 
    JOIN `foo` AS tmax ON t.Name = tmax.Name AND t.ValueAMax = tmax.ValueA; 
    
    0

    끝 부분에있는 귀하의 질의 :

    group by Name 
    
    +0

    안녕하세요, 제 원래 솔루션에서 실제로 그랬습니다. 문제는 여전히 각 이름에 대해 A, B1, B2에 대해 높고 낮음을 얻는 것입니다. 사실 높은 A와 낮은 A에 대해 B1과 B2 값이 필요합니다. – user3649739