programing

MYSQL 쿼리: 한 열이 여러 다른 그룹에서 여러 번 발생하고 특정 조건과 일치하는 모든 결과를 가져옵니다.

firstcheck 2022. 9. 6. 00:05
반응형

MYSQL 쿼리: 한 열이 여러 다른 그룹에서 여러 번 발생하고 특정 조건과 일치하는 모든 결과를 가져옵니다.

다음과 같은 데이터가 있다고 가정합니다.

object    size    color    units
------    ----    -----    -----
ball      small   red      3
ball      small   red      2
ball      medium  blue     2
ball      medium  blue     1
ball      big     yellow   2
hat       big     green    3
hat       big     green    4
umbrella  medium  blue     1
umbrella  medium  blue     4
umbrella  big     blue     4
umbrella  huge    red      2
umbrella  huge    green    1
book      small   white    4
book      small   brown    3
book      medium  brown    2

크기 및 색상에 대한 변동의 총 단위 중 적어도 하나가 5인 모든 객체에 대해 모든 객체 색상 크기 변동을 반환하는 쿼리가 필요합니다. 그러면 쿼리는 다음 행을 반환합니다.

object    size    color    total_units
------    ----    -----    ------
ball      small   red      5
ball      medium  blue     3
ball      big     yellow   2
umbrella  medium  blue     5
umbrella  big     blue     4
umbrella  huge    red      2
umbrella  huge    green    1

모든 공과 크기-색상 변화당 합계가 결과에 나타나는 이유는 두 개 이상의 서로 다른 공이 있고 그 중 하나 이상의 총 단위가 5개 이상이기 때문입니다.

모든 우산 및 크기-색상의 변화당 합계가 결과에 표시되는 이유는 적어도 두 개의 다른 우산이 있고 그 중 하나 이상의 총 단위가 5개 이상이기 때문입니다.

모자가 결과에 나타나지 않는 이유는 빅 그린 모자가 5개 이상 있더라도 최소 2개의 다른 모자가 존재하지 않기 때문입니다.

그 결과물이 하나도 나오지 않는 이유는 세 권의 책이 있는데도 적어도 다섯 권의 책이 없기 때문입니다.

어떻게 해야 하는지 알려주셔서 감사합니다!

창 기능(MySQL 및 MariaDB 데이터베이스의 최신 버전)을 사용하면 다음과 같이 간단합니다.

select object, size, color, total_units
from (select object, size, color, sum(units) as total_units,
             max(sum(units)) over (partition by object) as max_total_units,
             count(*) over (partition by object) as cnt
      from t
      group by object, size, color
     ) t
where max_total_units >= 5 and cnt > 1;
  • 파생 테이블에서 고유한 항목을 식별할 수 있습니다.Object둘 이상의 조합이 있는 값 및 조합 중 하나가 총 5개 이상의 단위를 가집니다.
  • 메인 테이블로 돌아가 해당 행만 가져옵니다(포스트).GROUP BY).

쿼리

SELECT 
  t.object, t.size, t.color, SUM(t.units) AS total_units 
FROM 
your_table AS t
JOIN 
(
  SELECT dt.object 
  FROM 
  (
    SELECT
      object, size, color, SUM(units) AS total_units 
    FROM your_table 
    GROUP BY 
      object, size, color
  ) AS dt 
  GROUP BY dt.object 
  HAVING COUNT(*) > 1 AND 
         SUM(dt.total_units >= 5) /* atleast one with 5 units */
) AS dt2 
  ON dt2.object = t.object
GROUP BY t.object, t.size, t.color;

결과

| object   | size   | color  | total_units |
| -------- | ------ | ------ | ----------- |
| ball     | big    | yellow | 2           |
| ball     | medium | blue   | 3           |
| ball     | small  | red    | 5           |
| umbrella | big    | blue   | 4           |
| umbrella | huge   | green  | 1           |
| umbrella | huge   | red    | 2           |
| umbrella | medium | blue   | 5           |

DB Fielen 보기

언급URL : https://stackoverflow.com/questions/53692975/mysql-query-to-get-all-results-where-one-column-happens-more-than-once-in-differ

반응형