코드를 존낸 쳐다봐야 에러가 보인다

(SQL) 특정 문자 맨 아래 정렬 본문

SQL

(SQL) 특정 문자 맨 아래 정렬

ballboy 2020. 2. 8. 12:27

(SQL) 특정 문자 맨 아래 정렬

예시 테이블

SELECT * FROM PEOPLE
더보기
CREATE TABLE PEOPLE
(
    ID          INT AUTO_INCREMENT PRIMARY KEY,
    NM          VARCHAR(10) NOT NULL,
    AGE         INT NOT NULL,
    PHONE_NB    VARCHAR(13),
    ADDR        TEXT,
    GENDER      VARCHAR(1)
);

DESC PEOPLE;

INSERT INTO PEOPLE(NM, AGE, PHONE_NB, ADDR, GENDER)
VALUES
('Leo',       29, '010-8440-3304', '4 Jersey St, Boston, MA 02215', 'M'),
('Connie',    38, '010-5774-8264', '1000 Vin Scully Ave, Los Angeles, CA 90012', 'F'),
('Zinna',     17, NULL, '2001 Blake St, Denver, CO 80205', 'F'),
('Maggie',    57, '010-8572-1480', '1 E 161 St, The Bronx, NY 10451', 'F'),
('Minnie',    19, '010-0042-3531', NULL, 'M'),
('Jenifer',   25, '010-7370-0821', '100 Joe Nuxhall Way, Cincinnati, OH 45202', 'F'),
('Narcisse',  39, '010-9802-5234', '501 Crawford St, Houston, TX 77002', 'M'),
('Enoch',     49, NULL, '1060 W Addison St, Chicago, IL 60613', 'M'),
('Hermosa',    4, NULL, '2100 Woodward Ave, Detroit, MI 48201', 'F'),
('Calix',     59, '010-2549-1262', NULL, NULL);

SELECT * FROM PEOPLE

문제 ) 주어진 데이터의 PHONE_NB 순으로 정렬(단, NULL 값은 맨 아래로 정렬)

SELECT * 
  FROM PEOPLE
 ORDER BY PHONE_NB

ORDER BY PHONE_NB

  • NULL 값이 위로 정렬이 됨
SELECT *
  FROM PEOPLE
 ORDER BY PHONE_NB DESC

ORDER BY PHONE_NB DESC

  • NULL 값이 아래로 가지만 PHONE_NB 값이 거꾸로 정렬이 됨

해결 방법 : 값이 있는 ROW와 값이 NULL인 ROW를 위아래로 나눠 정렬 후 값이 있는 ROW를 다시 정렬

SELECT * 
FROM PEOPLE
ORDER BY (CASE WHEN PHONE_NB IS NULL THEN 1 ELSE 0)

CASE WHEN PHONE_NB IS NULL THEN 1 ELSE 0 END

  • 값이 있는 ROW와 NULL 인 ROW를 분리 정렬
SELECT *
FROM PEOPLE
ORDER BY ( CASE WHEN PHONE_NB IS NULL THEN 1 ELSE 0 END ),
          PHONE_NB

CASE WHEN PHONE_NB IS NULL THEN 1 ELSE 0 END, PHONE_NB

  • 값이 있는 ROW의 정렬

정리 : CASE WHEN 문의 수정에 따라 원하는 값을 원하는 위치에 정렬 가능

문제2 ) 나이가 20대인 사람을 마지막에 정렬 후 나이순 대로 정렬

SELECT * 
  FROM PEOPLE 
 ORDER BY ( CASE WHEN AGE DIV 10 = 2 THEN 1 ELSE 0 END), AGE;

CASE WHEN AGE DIV 10 = 2 THEN 1 ELSE 0 END, AGE

'SQL' 카테고리의 다른 글

MySql (CREATE, DROP, INSERT, DELETE, UPDATE)  (0) 2020.02.20
(SQL) Inner join / Outer join  (0) 2020.02.17
Comments