hacker_id, name, total # of challenges created by student 구하기
만약 1명 이상의 학생이 같은 #의 challenge 만들었다면
hacker_id로 결과 분류
만약 1명 이상의 학생이 같은 #의 challenge 만들고 max # of challenges보다 작으면
결과값에서 제외
결과를 total # of challenges desc, hacker_id order로 정렬
hacker_id, name, count of challenges_created 구하기
# > Max challenges_created: 불가능
# = max challenges_created: hacker_id로 결과 분류
# < max challenges_created: 결과값에서 제외
그 외는 그대로 적기
결과를 total # of challenges desc, hacker_id order로 정렬
hackers tbl(hacker_id, name), challenges tbl(count of challenges_created)
challenges_created = MAX(challenges_created): ORDER BY hacker_id
-- challenges_created가 최대값인 경우에는 여러명이어도 결과에 포함됨
challenges_created < MAX(challenges_created) & 1명 이상: 결과값 제외
그 외(=challenges_created가 최대값이 아니고 1명임)는 그대로 적기
-- 위 두 문장은 결국 challenges_created가 최대값이 아닌 경우,
-- 1명만 challenges_created의 개수를 가진 경우를 count하면 된다는 의미
ORDER BY challenges_created DESC, hacker_id
다시 정리하자면
SELECT hackers tbl(hacker_id, name)
,challenges tbl(count of challenges_created)
challenges_created = MAX(challenges_created)
OR
challenges_created의 count = 1
ORDER BY challenges_created DESC, hacker_id
SELECT h.hacker_id, h.name, COUNT(*) challenges_created
FROM challenges c
INNER JOIN hackers h ON c.hacker_id = h.hacker_id
GROUP BY h.hacker_id, h.name
HAVING challenges_created = (SELECT MAX(challenges_created)
FROM (SELECT hacker_id
,COUNT(*) AS challenges_created
FROM challenges
GROUP BY hacker_id) sub)
OR challenges_created IN (SELECT challenges_created
FROM (SELECT hacker_id
,COUNT(*) AS challenges_created
FROM challenges
GROUP BY hacker_id) sub
GROUP BY challenges_created
HAVING count(*)=1)
ORDER BY challenges_created DESC, hacker_id
WITH counter AS (SELECT h.hacker_id, h.name, COUNT(*) AS challenges_created
FROM challenges c
INNER JOIN hackers h ON c.hacker_id = h.hacker_id
GROUP BY h.hacker_id, h.name)
SELECT counter.hacker_id, counter.name, counter.challenges_created
FROM counter
WHERE challenges_created = (SELECT MAX(challenges_created) FROM counter)
OR challenges_created IN (SELECT challenges_created
FROM counter
GROUP BY challenges_created
HAVING COUNT(*) = 1)
ORDER BY counter.challenges_created DESC, counter.hacker_id
글로벌 유저들의 답안 분석하기