| English | 의미 |
|---|---|
| SQL/ˌes kjuː ˈel/ | SQL(구조화查询语言) |
| JOIN/dʒɔɪn/ | 조인 |
| GROUP BY/ɡruːp baɪ/ | 그룹 바이 |
두 개의 다른 과정이 동일한 제목을 공유함
- 두 과정 모두 '로봇공학'으로 불립니다. 제목만으로 그룹화하면 등록을 합치고 이들이 서로 다른 과정임을 숨깁니다.
- SQL은 원하는 데이터 결과를 설명합니다. 타당해 보이는 카운트에 의존하기 전에 행 신원과 예상 출력을 확인하십시오.
JOIN에서 관계를 따르십시오
- JOIN은
e.course_id = c.id와 같은 관계를 사용하여 행을 결합합니다. 의도한 관계를 명시적으로 작성하십시오. - 크로스 조인은 한 쪽의 모든 행을 다른 쪽의 모든 행과 짝 짓습니다. SQLite에서는 제약 조건의 조인이 해당 곱집합을 생성할 수 있으며, 다른 SQL 시스템은 누락된 JOIN 조건을 거부할 수 있습니다.
SQLite에서 제약 조건이 없는 조인은 세 가지 과정과 세 가지 등록을 매칭합니다. 이 조인은 몇 개의 쌍을 생성할 수 있습니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
교차 곱은 이후의 필터링이 적용되기 전까지 3 × 3개의 행을 가집니다.
등록 건수가 제로인 과정 유지
- 왼쪽 조인은 매칭된 등록이 없는 과정 포함 모든 과정을 유지합니다. 이 경우 매칭되지 않은 등록 필드는 NULL입니다.
- NULL을 제외하는
e.student_id를 세고, 유지된 매칭되지 않은 행도 세는COUNT(*)을 세지 마십시오. 빈 과정은 영을 보고해야 합니다.
매칭되지 않는 좌측 조인 과정에 대한 영등록 개수를 올바르게 세는 식은 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
매칭되지 않는 nullable 필드의 COUNT는 NULL을 제외하고, COUNT(*)는 유지된 행 전체를 카운트합니다.
알려진 정답이 있는 쿼리 실행
- 로컬 SQLite 데이터베이스에서 이 전체 스크립트를 실행하십시오. 두 로봇공학 과정은 서로 다른 ID를 가지며, 예술 과정에는 등록이 없습니다.
- GROUP BY는 과정 ID와 제목 모두로 그룹화합니다. 예상되는 행 수는
(7, Robotics, 1),(8, Robotics, 2),(9, Art, 0)입니다.
CREATE TABLE courses (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
CREATE TABLE enrolments (student_id INTEGER, course_id INTEGER);
INSERT INTO courses VALUES (7, 'Robotics'), (8, 'Robotics'), (9, 'Art');
INSERT INTO enrolments VALUES (1, 7), (1, 8), (2, 8);
SELECT c.id, c.title, COUNT(e.student_id) AS enrolled
FROM courses AS c
LEFT JOIN enrolments AS e ON e.course_id = c.id
GROUP BY c.id, c.title
ORDER BY c.id;
과정 ID와 제목으로 그룹화하는 절을 완성하세요: ____ c.id, c.title
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
GROUP BY는 그룹을 정의합니다. ID를 포함하면 동일한 제목의 서로 다른 과정을 구분하게 됩니다.
완전한 쿼리는 과정 ID 7, 8 및 9에 대해 각각 어떤 등록 개수를 반환합니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
표본에서 7에 해당하는 사례는 하나, 8에 해당하는 사례는 두 가지, 9에 해당하는 사례는 없습니다.
다른 단계에서 행 및 그룹 필터링
WHERE는 그룹화 전에 입력 행을 필터링합니다.HAVING은COUNT(e.student_id) >= 2와 같은 조건을 사용하여 그룹을 필터링합니다.- 이 예제에서 HAVING 조건을 ORDER BY 앞에 추가하면 8 과정만 반환됩니다. WHERE에서
e.student_id를 필터링하면 유지하려던 매칭되지 않는 행이 제거될 수 있습니다.
최소 2명의 등록 학생이 포함된 그룹만 필터링하는 절은 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
HAVING은 그룹에 조건을 적용하고 WHERE는 입력 행을 필터링합니다.
과정 개수 예제를 사용하여 WHERE와 HAVING을 설명하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
WHERE는 행을 필터링하고, HAVING은 각 그룹의 개수를 검증합니다.
경계 사례를 사용하여 결과 검증
- 반복된 제목, 일치하지 않는 경우 및 다중 일치를 알려진 카운트와 대조하여 확인하십시오. 합리적으로 보이는 결과만으로 충분하지 않습니다.
- 선택된 필드, 조인 조건, 그룹화 및 카운트를 설명하십시오. 중복 관계 행이 유효한지, 아니면 스키마에 의해 방지되어야 하는지 결정하십시오.
관계에 대해 JOIN하고, 정체성에 대해 GROUP BY하여 의도한 대상을 카운트하십시오. 작고 알려진 데이터셋은 잘못된 쿼리를 더 쉽게 발견할 수 있게 해줍니다.
합리적인 개수 계산만으로도 SQL 쿼리가 올바르다는 증거가 됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
일치하지 않는 경우(0개)와 중복된 제목을 포함한 알려진 예상 행과 비교하십시오.
제목만으로 그룹화하면 두机器人的(Robotics) 과정을 별도로 분리하게 됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
동일한 제목은 하나의 그룹을 형성합니다. 과정 ID로도 그룹화해야 합니다.