오더바이 질문입니다. 기존 정렬 조건이 있고 , 사용자가 입력한 것이 있으면 그거 우선 순위로 나오게요. 0 2 6,826

by 유환 [SQL Query] [2024.08.01 00:00:30]


emp 테이블을 예로 들면 

emp 테이블에 empno 와 order 컬럼이 있다고 가정하고 

order 컬럼에 값이 있으면 이게 1순위 이고 없으면 empno 순으로 정렬 합니다.

1번과 2번 SQL 은 결고가 다른가요??? 같은거 같은대 GPT는 겱과가 다르다고 하네요.

1번 

SELECT * 
  FROM emp 
 order by nvl(eorder ,  mpno )

 

2번

SELECT *

FROM emp

ORDER BY CASE WHEN order IS NOT NULL THEN 0 ELSE 1 END,

order,

empno;

by 마농 [2024.08.01 08:12:35]

의미가 다른 쿼리입니다.
그리고 order 과 같은 예약어는 명칭으로 사용하면 안됩니다.
다른 명칭을 사용하셔야 합니다.(예 : ord)
1번 쿼리는
- NVL(ord, empno) 의 결과값으로 전체 정렬을 하는 것이고
2번 쿼리는
- 그룹 정렬입니다. 0번 그룹(ord 가 있는 그룹)과 1번 그룹(ord 가 없는 그룹)
- 0번 그룹이 먼저 나오고 1번 그룹이 나중에 나온뒤
- 해당 그룹 안에서만 ord 와 empno 로 정렬이 됩니다.
- 그룹 간 데이터가 섞이지 않죠.(1번은 서로 섞입니다)
만약
- ord 의 값은 무조건 1자리 수이고
- empno 의 값은 4자리 수라고 가정하면
- 1번 쿼리도 동일한 결과가 나올 수는 있습니다.
그리고
- 2번 쿼리는 굳이 case 가 필요 없을 듯 하네요.
- ORDER BY ord, empno
- Oracle 기준으로 널이 나중에 나오기 때문, MSSQL 은 거꾸로


by 유환 [2024.08.04 13:59:28]

감사합니다.

덕분에 간단하게 해결 돼었습니다.

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