---
### 1. `SELECT name, subject, DISTINCT score FROM students;`
이 쿼리는 문법적으로 **잘못된 쿼리**입니다. `DISTINCT`는 `SELECT` 문에서 **전체 행에 대해 적용되는 키워드**이므로, 개별 컬럼에 대해서만 `DISTINCT`를 적용할 수 없습니다. 또한 `DISTINCT`는 항상 `SELECT` 바로 뒤에 위치해야 하므로 `DISTINCT` 키워드가 컬럼 중간에 들어가면 SQL 문법 오류가 발생합니다.
올바른 문법으로 고치려면 다음과 같이 작성할 수 있습니다:
```sql
SELECT DISTINCT name, subject, score FROM students;
```
이 경우, `name`, `subject`, `score`의 조합을 기준으로 중복된 행을 제거하여 출력합니다. 즉, `name`, `subject`, `score`의 값이 모두 동일한 경우 중복된 행이 제거됩니다.
---
### 2. `SELECT name, subject, count(DISTINCT score) FROM students;`
이 쿼리는 **문법적으로 올바른 쿼리**입니다. 하지만, 이 쿼리를 실행하면 **오류가 발생**할 가능성이 높습니다. 그 이유는 `COUNT(DISTINCT score)`는 집계 함수이므로, `name`과 `subject`를 사용하면서 `GROUP BY` 절이 필요합니다.
즉, `name`과 `subject`에 대해 그룹화하지 않으면 SQL은 어떤 기준으로 `name`과 `subject`별로 `DISTINCT score`의 개수를 세어야 할지 알 수 없습니다.
올바른 쿼리는 다음과 같습니다:
```sql
SELECT name, subject, COUNT(DISTINCT score) AS unique_score_count
FROM students
GROUP BY name, subject;
```
이 쿼리는 각 `name`과 `subject` 조합별로 고유한 `score`의 개수를 계산하여 반환합니다.
#### 예시 결과
| name | subject | unique_score_count |
|---------|---------|--------------------|
| Alice | Math | 1 |
| Bob | Math | 1 |
| Alice | English | 1 |
| Charlie | Math | 1 |
| Bob | English | 1 |
위 예시는 `name`과 `subject`의 각 조합마다 고유한 `score`의 개수를 출력하는 결과입니다.
'취준이랄까.. > SQLD' 카테고리의 다른 글
my sql, case when (0) | 2024.10.31 |
---|---|
my sql, 정규표현식 (1) | 2024.10.31 |
MYSQL) SUBSTRING, SUBSTRING_INDEX (0) | 2024.10.31 |
union all 쿼리시 틀릴 수 있는 부분 (0) | 2024.10.31 |
[GROUP BY] 조건에 맞는 사용자와 총 거래금액 조회하기: 프로그래머스 (0) | 2024.04.19 |