반응형
조인 상위 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
반응형
'programing' 카테고리의 다른 글
특정 문자 뒤에 있는 모든 항목 제거 (0) | 2022.12.20 |
---|---|
Java 메서드 선언의 최대 매개 변수 수 (0) | 2022.12.20 |
오류 2006(HY000):MySQL 서버가 사라졌습니다. (0) | 2022.12.20 |
각 Angular 프로젝트에서 생성되는 파일 수가 엄청납니다. (0) | 2022.12.20 |
PDO PHP에서 쿼리 오류를 보는 방법 (0) | 2022.12.20 |