정렬쿼리질문 0 10 804

by nandahappy [SQL Query] 정렬 그룹 [2019.08.23 10:32:02]


안녕하세요 쿼리가너무어려워서 글을 남깁니다

    col1/col2/col3/col4/col5/col6

1 : 2019/ 2/ 1/ 2/ 2/ 1

2:  2019/ 2/ 2/ 1/ 1/ 2

3:  2019/ 2/ 3/ 4/ 4/ 3

4:  2019/ 2/ 4/ 3/ 3/ 4

 

이런 4개의 로우가있을때 1,2번로우랑 3,4번 로우랑 같은 순번을 매기려면어떻게해야될까요?

    col1/col2/col3/col4/col5/col6/number

1 : 2019/ 2/ 1/ 2/ 2/ 1  /1

2:  2019/ 2/ 2/ 1/ 1/ 2  /1

3:  2019/ 2/ 3/ 4/ 4/ 3  /2

4:  2019/ 2/ 4/ 3/ 3/ 4  /2

진짜머리로안나오네요 ㅠ 순번 그룹핑해서만들기가 ㅠ

by 마농 [2019.08.23 10:36:15]

정렬질문 하시려면 정렬기준을 제시하셔야 합니다.
정렬기준이 ORDER BY col1, col2, col3 인가요?


by nandahappy [2019.08.23 10:45:13]

첫번째데이터의 col3이랑  두번째데이터의 col4랑 같은 데이터는 한개의 넘버로 묶길 바랍니다 ㅠ


by 우리집아찌 [2019.08.23 10:38:07]
WITH T ( col1,col2,col3,col4,col5,col6 ) AS (
SELECT 2019, 2, 1, 2, 2, 1 FROM DUAL UNION ALL
SELECT 2019, 2, 2, 1, 1, 2 FROM DUAL UNION ALL
SELECT 2019, 2, 3, 4, 4, 3 FROM DUAL UNION ALL
SELECT 2019, 2, 4, 3, 3, 4 FROM DUAL 
)

SELECT A.*
      ,ROUND(ROWNUM/2) AS NUM1
      ,NTILE(2) OVER(ORDER BY ROWNUM) NUM2
  FROM (SELECT col1
              ,col2
              ,col3
              ,col4
              ,col5
              ,col6
          FROM T
         ORDER BY col1,col2,col3  ) A
 

 


by nandahappy [2019.08.23 10:50:30]

의도랑 다른거같네요 ㅠㅠ

col3,col4,col5,col6이 메인인데 1,2번째줄이 1로 묶이고 3,4번째줄이 2로 묶이길바랍니다 ㅠ

실제데이터는 1,2,2,1 이런식이아니라서 ㅠ

1/2/2/1이랑 2/1/1/2이랑 같이 묶일수있게 할수있을까요?

실제 데이터로우는 1000줄이넘습니다


by 마농 [2019.08.23 10:49:51]

계층구조인가요?
col1, col2 식으로 모호하게 표현하지 말고
연도, 코드, 부모코드, 구분1, 값1 식으로 명확하게 표현해 주세요.
질문도 1,2행 합친다 식의 결과론만 예기하지 마시고
위처럼 합치게 되는 이유를 상세하게 설명해 주세요.
댓글 보니 원본 질문과는 완전 다른 질문이 되어 버리네요.


by nandahappy [2019.08.23 10:54:56]

그럼 col1,2는 무시해도됩니다

실제 메인은 col 3,4,5,6인데

데이터가보면 1/2/2/1 2/1/1/2 을 같은그룹으로 인식해서 번호를따면됩니다 

9/6/6/9랑 6/9/9/6이랑 같은 그룹번호 이런식으로 나오면됩니다 ㅎㅎ ㅠ


by nandahappy [2019.08.23 10:57:12]

설명이부족해서 죄송합니다 ㅠ

주민번호형식으로 예를들면

111111-*******/ 222222-*******/222222-*******/111111-*******

/ 222222-*******111111-*******/111111-*******/222222-*******   ---이 두개가 같은그룹번호

 

333333-*******/ 444444-*******/444444-*******/333333-*******

/ 444444-*******333333-*******/333333-*******/444444-*******   ---이 두개가 같은그룹번호

 

666666-*******/ 999999-*******/999999-*******/666666-*******

/ 999999-*******/666666-*******/666666-*******/999999-*******   ---이 두개가 같은그룹번호

 

이런식으로 될까요 ?ㅠ


by 마농 [2019.08.23 11:03:47]

일단 질문 대충 올리고, 답변 달리면 아님 말고~ 식인것 같아요.
질문을 성의를 좀 가지고 해주셨으면 합니다.
col1, col2 무시하라고 하는데 무시해도 되는지 의문이구요?
col3,4,5,6 이 (1/2/2/1 2/1/1/2) 식이면?
col1, col2 가 달라도 하나로 합쳐지나요?
col1, col2 가 같아야 될 것 같은 생각이 드는데요?

항상 1/2/2/1 식으로 앞에 두개가 뒤에 두개랑 같은가요?
1/2/3/4 처럼 앞뒤 자료가 다른 자료는 없나요?


by nandahappy [2019.08.23 11:15:56]

아님말고가아니고 진짜 절실하게 답을 바라는상황입니다..ㅠ col1,col2는 무시해도되는상황입니다.

모든데이터의 col1,col2가 2019/2이므로 무시해도된다는 뜻이였습니다...헷갈릴꺼같아서...

구글에서 오라클검색때마다 마농님답글을 많이봤는데 이렇게 답변달아주셔서 감사합니다


by 마농 [2019.08.23 11:23:46]

모두 동일하다는 전제가 깔려있네요. 그래서 무시해도 된다고 한거구요?
그럼 만약 동일하지 않다면? 무시하면 안되겠네요?
이런 전제조건도 질문시 제시해 주셔야 합니다.
질문에 빠진게 너무 많네요.
 

WITH t AS
(
SELECT '2019' c1, 2 c2, 1 c3, 2 c4, 2 c5, 1 c6 FROM dual
UNION ALL SELECT '2019', 2, 2, 1, 1, 2 FROM dual
UNION ALL SELECT '2019', 2, 3, 4, 4, 3 FROM dual
UNION ALL SELECT '2019', 2, 4, 3, 3, 4 FROM dual
)
SELECT c1, c2, c3, c4, c5, c6
     , DENSE_RANK() OVER(
       ORDER BY c1, c2
       , LEAST(c3, c4), GREATEST(c3, c4)
       , LEAST(c5, c6), GREATEST(c5, c6)
       ) dr
  FROM t
;

 

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