SQL에서 같은 그룹의 최대/최소 레코드 읽어들이기

4876 단어 MySQLSQL

하고 싶은 일


같은 카테고리에서 가장 높은 상품을 하나씩 얻고 싶은 녀석.
다음 예에서 ★의 기록을 추출하고 싶습니다.

1. 표를 만들어 데이터에 넣기

create table items (
  id int not null primary key,
  name varchar(100),
  price int,
  category varchar(100)
);

insert into items values(1, 'りんご', 190, 'くだもの');
insert into items values(2, 'みかん', 100, 'くだもの');
insert into items values(3, 'きゅうり', 80, '野菜');
insert into items values(4, '人参', 110, '野菜');
insert into items values(5, 'キャベツ', 110, '野菜');
insert into items values(6, '豚肉', 300, '肉');
insert into items values(7, '牛肉', 400, '肉');

2. 품목별 최고 가격 추출

select category, max(price) as price from items group by category;
결과

3. 그리고 이 종류, 가격 중 가장 작은 id를 얻는다.


하위 질의를 사용합니다.
select 
    category, price, min(id) as id
from 
    items 
where 
    (category, price) 
    in
    (
        select 
            category
            ,max(price) as price 
        from 
            items 
        group by 
            category
    )
group by
    category, price
;
결과

4. 그리고 이 id로 items를 추출합니다.


이 밖에 하위 조회.무거워 보여요.
select 
    * 
from 
    items
where 
    id in (
        select 
            min(id) as id 
        from 
            items 
        where 
            (category, price) 
            in
            (
                select 
                    category ,max(price) as price 
                from 
                    items 
                group by category
            )
            group by category, price
    )
;
결과

끝.
더 쉬운 방법은 없나?

좋은 웹페이지 즐겨찾기