inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[#100.000.000] Giải quyết vấn đề SQL trung cấp để phân tích dữ liệu

Giải bài 4

4번 문제 group by 질문

315

hipass4

12 câu hỏi đã được viết

0

select h.hacker_id, h.name from Submissions s

inner join Hackers h on s.hacker_id = h.hacker_id

inner join Challenges c on s.challenge_id = c.challenge_id

inner join Difficulty d on c.difficulty_level = d.difficulty_level

where d.score = s.score

group by h.hacker_id having count(h.hacker_id) > 1

order by count(h.hacker_id) desc, h.hacker_id

 

제가 푼 답안인데 틀렸다고 나옵니다.

 

 

group by h.hacker_id, h.name 2개를 해줘야 정답으로 나오는데 hacker_id만 그룹화 해서 묶어도 되는거 아닌가요? select 에 h.hacker_id, h.name 이 두개의 컬럼을 다 group으로 묶어줘야 되는 이유가 있나요? 이해가 되지 않습니다.

sql

Câu trả lời 2

1

jaemin

SELECT 절에는 GROUP BY 기준이 되는 컬럼과 집계 함수로 선택된 컬럼만 포함되어야 합니다. 만약 집계되지 않은 컬럼(여기서는 h.name)이 SELECT에 포함되었는데, 이 컬럼이 GROUP BY에도 없다면 쿼리가 올바르게 동작하지 않을 수 있습니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴이에요.

SQL에서 GROUP BY 구문은 결과를 그룹화하고 집계 함수(예: COUNT, SUM, AVG 등)와 함께 사용할 때 주로 활용됩니다. GROUP BY 절에는 결과를 그룹화할 열을 지정해야 합니다.

이 경우에는 h.hacker_id 열을 GROUP BY 절에 포함시켰을 때도 작동하지만, h.name 열을 추가하여 h.hacker_id와 h.name을 함께 그룹화해야 정확한 결과가 나옵니다. 그룹화되지 않은 열은 집계 함수를 사용할 때 컴퓨터가 어떤 값을 선택해야 할지 알 수 없기 때문입니다. 따라서 h.hacker_id와 h.name 열 모두를 GROUP BY 절에 포함시키는 것이 좋습니다.

그리고, COUNT(h.hacker_id)는 해당 그룹 내의 h.hacker_id 값들의 개수를 세는 것입니다. 위의 쿼리는 count(h.hacker_id)가 1보다 큰 그룹들을 선택하고, 이를 그룹 내에서 개수가 큰 순으로 정렬하는 것입니다.

즉, h.hacker_id와 h.name을 함께 그룹화한 이유는 각 그룹 내의 h.hacker_id와 h.name의 개수가 1보다 큰 그룹들을 선택하고, 이를 개수가 큰 순으로 정렬하기 위해서입니다.

그룹화된 열을 SELECT 절에 모두 나열하지 않더라도, GROUP BY 절에 포함된 열을 SELECT 절에 포함시켜야 합니다. 따라서 SELECT 절에 h.hacker_id와 h.name을 모두 나열해주셔야 합니다.

자세한 내용은 SQL 문법과 GROUP BY 구문에 대해 더 공부하시면 좋을 것 같아요. 추가 질문이 있으시면 언제든지 해주세요. 좋은 결과 있기를 바라요!

섹션 4번에 2번 문제 질문입니다.

0

100

2

4번 문제

0

79

1

Top competitors 에서 having count(h.hacker_id)로 해도 되나요?

0

255

1

leetcode 620 group by 질문이요

0

198

2

강의 일시정지/ 기간연장 검토 요청

0

376

1

세트2 4번 문제풀이 해설에 관한 질문

0

347

2

Weather Observation Station 11_ not like 사용

0

263

1

Placements에서 LEFT JOIN 뒤에 ON 조건

0

279

1

Set2 4번문제 질문 - New Companies

0

312

1

WHERE절 안 쓰고 HAVING COUNT(D.score = S.score) > 1 쓰면 왜 안되나요?

-1

698

1

as 2 space-separated values. 무슨 말인가요???

0

426

1

Weather observation Station 11 관련 질문

1

368

2

4번문제풀이

0

449

1

섹션3. Weather Observation Station 18 문제 관련

0

368

2

섹션 2에 1,2번 문제풀이 관하여

0

427

1

기한연장문의

0

326

1

Weather observation station 11 문제 not like

-1

359

1

inner join 과 left join

1

591

1

4번 BST 문제 틀리는 이유

0

338

1

4번 문제 질문

0

285

1

620. Not Boring Movies 문제 질문드립니다

0

280

1

binary tree 질문 입니다.

0

292

1

Top Competitors 질문있습니다 ㅠㅠ

0

239

1

set4. 4번

0

314

1