코드를 존낸 쳐다봐야 에러가 보인다
(SQL) 특정 문자 맨 아래 정렬 본문
(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);
문제 ) 주어진 데이터의 PHONE_NB 순으로 정렬(단, NULL 값은 맨 아래로 정렬)
SELECT *
FROM PEOPLE
ORDER BY PHONE_NB
- NULL 값이 위로 정렬이 됨
SELECT *
FROM PEOPLE
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)
- 값이 있는 ROW와 NULL 인 ROW를 분리 정렬
SELECT *
FROM PEOPLE
ORDER BY ( 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;
'SQL' 카테고리의 다른 글
MySql (CREATE, DROP, INSERT, DELETE, UPDATE) (0) | 2020.02.20 |
---|---|
(SQL) Inner join / Outer join (0) | 2020.02.17 |
Comments