Study/SQL

[프로그래머스 SQL] 진료과별 총 예약 횟수 출력하기

delay100 2024. 1. 12. 14:05
728x90
반응형
SMALL

코딩테스트 연습 > GROUP BY > 진료과별 총 예약 횟수 출력하기

난이도: Lv.2 

언어: MySQL

https://school.programmers.co.kr/learn/courses/30/lessons/132202

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

실패

SELECT a.MCDP_CD AS '진료과코드', COUNT(a.APNT_YMD) AS '5월예약건수'
FROM APPOINTMENT a
WHERE 1=1
AND DATE_FORMAT(a.APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY a.MCDP_CD
ORDER BY '5월예약건수' ASC, a.MCDP_CD ASC

실패이유

1. ORDER BY 컬럼명에 ''를 붙힘

ORDER BY에서 ''(따옴표)를 붙히게 되면 문자 그자체로 해석이 되기 때문에 안된다!

 

 

성공

성공1.

SELECT a.MCDP_CD AS 진료과코드, COUNT(a.APNT_YMD) AS 5월예약건수
FROM APPOINTMENT a
WHERE 1=1
AND DATE_FORMAT(a.APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY a.MCDP_CD
ORDER BY 5월예약건수 ASC, a.MCDP_CD ASC

성공2.

SELECT a.MCDP_CD AS '진료과코드', COUNT(a.APNT_YMD) AS '5월예약건수'
FROM APPOINTMENT a
WHERE 1=1
AND DATE_FORMAT(a.APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY a.MCDP_CD
ORDER BY 5월예약건수 ASC, a.MCDP_CD ASC

성공3. *채택

SELECT a.MCDP_CD AS '진료과코드', COUNT(a.APNT_YMD) AS '5월예약건수'
FROM APPOINTMENT a
WHERE 1=1
AND DATE_FORMAT(a.APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY a.MCDP_CD
ORDER BY `5월예약건수` ASC, a.MCDP_CD ASC

성공 1, 2도 정답으로 체크가 되지만 성공 3을 채택한 이유는 공식문서에서 ``(백틱)을 이용하라고 적혀있기 때문이다.

나머지도 통과가 가능하긴 하다. 

https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html

 

MySQL :: MySQL 8.0 Reference Manual :: B.3.4.4 Problems with Column Aliases

B.3.4.4 Problems with Column Aliases An alias can be used in a query select list to give a column a different name. You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column: SELECT SQRT(a*b) AS root FROM tbl_name GROUP BY root

dev.mysql.com

 

*참고 chatGPT

따옴표를 사용하는 것은 열 이름이나 문자열 리터럴을 나타낼 때입니다. 그러나 정렬 순서를 지정하는 열에는 따옴표를 사용하지 않아야 합니다.

 


코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다. 

봐주셔서 감사합니다.

728x90
반응형
LIST