programing

조인 상위 3개 항목 가져오기

projobs 2022. 12. 20. 22:54
반응형

조인 상위 3개 항목 가져오기

상품, 카테고리, 상품_카테고리(각 카테고리에 속하는 상품)의 3개의 테이블이 있습니다.

각 카테고리에서 가장 비싼 상위 3개 제품을 원합니다.

나는 다음과 같은 기본적인 관계가 있다.

select c.name
     , p.id
     , p.price 
  from category c
  left 
  join product_category pc
    on pc.category_id = category.id
  left 
  join product p 
    on pc.product_id = p.id

하지만 지금은 각 카테고리에서 가장 비싼 3개만 구입하고 싶습니다.

이 경우 조인된 테이블은 원하는 수만큼 사용할 수 있으며 더 복잡한 쿼리로 에스컬레이션할 수 있습니다.

루프 없이 이것이 가능합니까?

10.2.14-MariaDB-log를 스키마 http://sqlfiddle.com/#!9/maria35a와 함께 사용하고 있습니다.

MySQL 8.0+ 및 MariaDB 10.2+ 지원창의 기능은 다음과 같습니다.dense_rank당신 사건을 처리하기에 적합한 곳이죠각 카테고리별로 제품 가격을 기준으로 순위를 매겨 상위 3위 이내만 뽑습니다.사용방법dense_rank는, 같은 가격의 카테고리의 제품이 있는 경우는, 특정 카테고리의 출력에 3 행이 넘을 수 있습니다.이 동작이 바람직하지 않은 경우 출력에 최대 3행의 행이 표시되도록 하려면 를 사용합니다.row_number대신 윈도우가 기능합니다.

select name, id
from (
  select c.name, p.id, dense_rank() over (partition by c.id order by p.price desc) as rank
  from category c
  left join product_category pc on pc.category_id = c.id
  left join product p on pc.product_id = p.id
) t
where rank <= 3

언급URL : https://stackoverflow.com/questions/51000326/get-the-top-3-items-of-a-join

반응형