Certification/SQLD 개발자

[SQLD] 2 단원 51 - 60 번 문제

개발자하소서 2023. 11. 13. 21:02
728x90
반응형
SMALL

 

 

 

더보기

정답 : ③

 

SQL 1 : 500 + 100 + 30 + 10 + 5 = 645

count(*) 만 널 값을 포함한다.

 

SQL 2 : 10 + 5

IN ( null ) <-- null 속성 값을 가지는 tuple 추출할 수 없음.

 

SQL 3 : grade로 그룹화한다. null 또한 하나의 그룹으로 묶이므로 총 6개의 tuple이 생성된다.

 

 

COUNT(*) : NULL까지 포함
COUNT(표현식) : NULL 미포함

 

 

 

 

 

 

 

더보기

정답 : ②

 

광고매체ID별로 광고시작일자가 가장 빠른 데이터를 추출하는 SQL을 작성해야 한다.

 

MIN() 함수는 선택한 열의 가장 작은 값을 반환합니다 . 

 

 

 

 

더보기

정답 : ④

 

3. GROUP BY로 그룹핑된 컬럼에 대해서 HAVING 조건절을 사용할 경우 집계된 칼럼의 FILTER조건으로 사용할 수 있다. 3번과 같은 쿼리의 경우 HAVING절대신 WHERE절을 이용해도 같은 결과를 낼 수 있다.

 

4. 중첩된 그룹함수의 경우 최종 결과값은 1건이 될 수 밖에 없기에

      GROUP BY절에 기술된 메뉴ID와 사용유형코드는 SELECT절에 기술될 수 없다.

 

 

GROUP BY다음에 조건 설정(HAVING) 해주지 않으면 최종 결과건이 1개라 SELECT에 기술될 수 없다.

 

 

  • GROUP BY는 출력값의 공통된 값을 묶어준다고 생각하면된다.
  • GROUP BY에 사용된 컬럼에 조건을 부여할 수 있는 것이 HAVING절이다.
  • 즉, GROUP BY에 적용된 컬럼에만 HAVING절을 적용할 수 있다. GROUP BY에 없는 컬럼에 HAVING 조건을 붙이면 오류가 발생한다.
  • HAVING 조건절에는 그룹함수와 관련한 어떠한 조건을 붙일 수 있다

 

 

 

 

 

더보기

정답 : ②

 

SELECT MAX(가) AS 가, 나, SUM(다) AS 다
FROM A
GROUP BY 나
HAVING COUNT(*) > 1
ORDER BY 다 DESC;

 

해당 쿼리문은 다음과 같이 해석 가능하다.

  • A테이블에서 가 컬럼의 가장 큰 값 라고 한다.
  • A테이블에서 컬럼을 선택한다.
  • A테이블에서 다 컬럼의 값을 합한 것 라고 한다.
  • 해당 값에서 나컬럼으로 그룹화 한다.
  • 그룹화 한 것에서 2개 이상의 값만 도출한다.
  • 다를 기준 내림차순 정렬한다.

 

 

 

 

더보기

정답: 2번

 

999, 100 순서로 나오는 SQL 결과

(CASE WHEN ID = 999 THEN 0 ELS ID END) 정답 999(첫번째행), 100(두번째행)

 

ORDER BY 절을 먼저 살펴보자.

 

 

CASE WHEN ~ THEN ~ END 의 CASE 절을 보니 SIMPLE_CASE_EXPRESSION 절이라고 확인할 수 있다.


위 CASE절을 만족하는 순서대로 정렬을 하게 된다.

ID로 그룹을 묶고 HAVING 조건에 의해서 100과 999의 칼럼만 남았다.

CASE절에 의해서 ID가 999이면 0이라고 하고 아니면 ID 그대로 둔다.

 

.

 

위의 표와 같은 형태로 바뀌지만 이는 ORDER BY절에만 적용되기 때문에
100과 0의 순서로 정렬을 하고서 SELECT 구문에 의해 데이터가 추출 될 때에는 원래의 데이터 그대로 나타난다.

 

 

 

 

더보기

 정답 : 3번

ORDER BY절은 SELECT에 지정하지 않은 컬럼도 사용할 수 있지만,

GROUP BY절로 기준(범위?)가 묶여 있을 경

GROUP BY 절에 기준이 되는 컬럼이거나

그룹 함수에 대한 컬럼이 아닌 컬럼이 ORDER BY절에 오면 오류가 발생한다.

 

 

2, 3번 모두 SELECT 절에 없는 '년' 컬럼으로 ORDER BY를 하고 있다.
2번은 행 전체 컬럼을 메모리에 로드하는 오라클의 특성 때문에 가능하다.
하지만 3번은 지역으로 GROUP BY를 하고 있기 때문에 각 지역당 존재하는 '년' 컬럼이 사라지게 된다. 따라서 불가능하다.

 

2번은 GROUP BY 가 없기 때문에 테이블열을 기준으로 실행됨.

GROUP BY 가 있으면 내부적으로 연산후에 데이터셋을 만든 것을 기준으로 하기 때문입니다.

서브쿼리도 마찬가지

3번 지문에서 ORDER BY는 순서상 마지막에 실행하고 SELECT 절에 있는 항목을 가지고 실행됨.

년 이라는 항목은 없으니 오류가 남

 

 

 

 

 

 

 

 

 

더보기

답: 3번

ORDER BY 절에 컬럼명 대신 Alias명이나 컬럼 순서를 나타내는 정수혼용하여 사용할 수 있다.

GROUP BY절을 사용하는 경우 ORDER BY 절집계함수를 사용할 수도 있다.

DBMS마다 NULL값에 대한 정렬 순서가 다를 수 있으므로 주의하여야 한다.

 

 

 

 

 

 

 

 

더보기

답: 2번

ORDER BY (CASE WHEN ID='A' THEN 1 ELSE 2 END), AMT DESC

CASE절을 이용해서 원래의 정렬 순서를 변경하였다.

1-2 순(숫자 순)으로 배열이 되고,

그 이후는 AMT DESC 순서로 배열된다

 

 

 

 

 

 

 

 

더보기

답: 4번

SELECT 문장의 실행 순서는 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 이다.

 

 

 

 

 

 

더보기

답: 4번


승리건수가 높은 순으로 3위까지 출력하되 3위의 승리건수가 동일한 팀이 있다면 함께 출력하기 위한 코드

SELECT TOP(3) WITH TIES 팀명, 승리건수

728x90
반응형
LIST

'Certification > SQLD 개발자' 카테고리의 다른 글

[SQLD] 2 단원 61 - 70 번 문제  (0) 2023.11.13
[SQLD] 1단원 41-52문제  (0) 2023.11.13
[SQLD] 1단원 31-40문제  (0) 2023.11.13
[SQLD] 1단원 21-30문제  (0) 2023.11.13
[SQLD] 1단원 11-20 문제  (0) 2023.11.13