복붙노트

[SQL] SQL : 여러 열을 GROUP BY 및 MAX를 사용하여

SQL

SQL : 여러 열을 GROUP BY 및 MAX를 사용하여

나는 SQL 쿼리에 문제가 있습니다. 이 예제 데이터를 가지고 가게

itemID  catID  attrib1  attrib2
  1       1       10       5   
  2       1       10       7
  3       1        5      10
  4       2       18      15

나는 (attrib2 이상 attrib1 가진 우선 순위) 각 카테고리에 가장 적합한 항목을 반환 할

물론, SELECT CATID, MAX (attrib1)는, MAX CATID BY test_table 그룹 (attrib2는) 작업은 1 고양이 10 및 10을 반환하지 않기 때문에.

그래서 attrib2 행에서 최대 값을 선택하지만 attrib1도 최대 값 것들을 고려하는 MySQL의에게 어쨌든 무엇입니까? 즉 다음과 같은 데이터를 반환

 catID  attrib1  attrib2
   1       10       7   
   2       18      15

해결법

  1. ==============================

    1.당신은 최고의 attrib1 값을 얻을, 다음 attrib2 값에 가입하고 각 attrib1 값에 대한 사람들의 최선을 얻을 수 있습니다 :

    당신은 최고의 attrib1 값을 얻을, 다음 attrib2 값에 가입하고 각 attrib1 값에 대한 사람들의 최선을 얻을 수 있습니다 :

    select t2.catID, t2.attrib1, max(t2.attrib2)
    from
    (
      select catID, max(attrib1) as attrib1
      from test_table
      group by catID
    ) t1
    inner join test_table t2 on t2.catID = t1.catID and t2.attrib1 = t1.attrib1
    group by t2.catID, t2.attrib1
    
  2. ==============================

    2.사용하다:

    사용하다:

    SELECT x.catid,
           x.max_attrib1 AS attrib1,
           (SELECT MAX(attrib2)
              FROM YOUR_TABLE y
             WHERE y.catid = x.catid
               AND y.attrib1 = x.max_attrib1) AS attrib2
      FROM (SELECT t.catid,
                   MAX(t.attrib1) AS max_attrib1
              FROM YOUR_TABLE t
          GROUP BY t.catid) x
    
  3. ==============================

    3.

    SELECT tt.catId, tt.attrib1, MAX(tt.attrib2)
    FROM   test_table tt
    GROUP BY tt.catID, tt.attrib1
    WHERE  tt.attrib1 = (SELECT MAX(t2.attrib1) FROM test_table t2 WHERE t2.catID = tt.catID)
    
  4. ==============================

    4.

    SELECT catID, max1, max2 FROM
    ((SELECT Max(attrib1) as max1, catID GROUP BY attrib1) as t1
    INNER JOIN
    (SELECT MAX(attrib2) as max2, catID GROUP BY attrib2) as t2
    ON t1.catID = t2.catID) as t3
    
  5. from https://stackoverflow.com/questions/4045609/sql-using-group-by-and-max-on-multiple-columns by cc-by-sa and MIT license