mariadb 쿼리문 질문드립니다 0 8 952

by 메밀묵도토리묵 [SQL Query] mariadb dbeaver [2022.05.23 13:35:45]


과일 가격 원산지
사과 7000 미국
사과 7000 미국
6000 한국
6000 한국
6000 한국

위의 테이블을

과일 가격 원산지
사과 7000 미국
    미국
6000 한국
    한국
    한국

이렇게 특정 칼럼의 중복되는 값을 공란(빈칸)으로 표시하고 싶으면, 쿼리를 어떻게 작성해야 할까요?

mariadb, dbeaver로 하고 있는데, 오라클 쿼리는 안 되는 거 같아서, mariadb로는 어떻게 해야할지 잘 모르겠네요...

select 과일, 가격, 원산지 from tb_fruit 이라고 쿼리를 가정하면 어떻게 작성해야 아래 테이블처럼 나오는지 아시는 분 있으신가요????

by 신이만든지기 [2022.05.23 14:24:24]

select case when @before_name = name then ''
            else @before_name := name
        end as name
     , case when @before_price = price then ''
            else @before_price := price
       end as price
     , a.origin
  from (select '사과' name, 7000 price, '미국' origin union all
        select '사과' name, 7000 price, '미국' origin union all
        select '배' name, 6000 price, '한국' origin union ALL
        select '배' name, 6000 price, '한국' origin union ALL
        select '배' name, 6000 price, '한국' origin ) AS a;

by 메밀묵도토리묵 [2022.05.23 14:43:06]

감사합니다 ^^

혹시 'name' 이 과일 컬럼인가요? '@before_name' 은 뭔지 여쭤봐도 될까요?


by 신이만든지기 [2022.05.23 14:50:12]

name, price, origin => 과일, 가격, 원산지 입니다.

@before_name, @before_price =>  바로 이전 row 과일/가격입니다.

case 절은 이전 row와 과일명/가격이 같으면 공백 처리하고 다르면 표기하라는 의미입니다.


by 메밀묵도토리묵 [2022.05.23 15:12:20]

감사합니다~~


by 메밀묵도토리묵 [2022.05.23 15:26:06]

혹시 'from' 뒤도 전부 입력해야 정확하게 나오는 건가요? from 뒤는 table명만 적는게 맞는거죠?

적용해서 해봤는데, 

과일 가격 원산지

               미국

사과 7000  미국

               한국

               한국

배    6000  한국

처럼 데이터가 시작되는 맨 첫 줄에 나와야 하는데, 맨 아랫줄에 나오는 건 왜 그런지 아시나요?


by 마농 [2022.05.23 15:50:30]

MariaDB 10 이상, MySQL 8 이상이면 분석함수 ROW_NUMBER 를 이용하면 됩니다.
이하 버전이라면 @변수 를 이용하면 됩니다.
@변수 적용 전 데이터가 정렬되어 있어야 정상적인 결과가 나올 것입니다.


by 메밀묵도토리묵 [2022.05.23 16:06:34]

감사합니다~

그럼 '@before_name' 을 'ROW_NUMBER_name' 으로 바꾸면 될까요?

데이터가 정렬되어 있어야 한다는 의미가 'order by' 를 이용하라는 말씀인가요?


by 마농 [2022.05.23 16:15:41]

위 샘플 자료는 과일명이 모여있지만(정렬되어 있음)
실제 테이블엔 흩어져 있을 가능성이 있습니다.
row_number 함수를 사용하라는 의미입니다.(버전 확인하세요). 변수 명칭 바꾸는거랑 상관 없음.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입