WITH cte AS (
SELECT
h.hacker_id
, name
, COUNT(challenge_id) AS challenges_created
FROM
hackers h
JOIN challenges c
USING(hacker_id)
GROUP BY
h.hacker_id
, name
)
SELECT
*
FROM
cte
WHERE
challenges_created = (
SELECT
MAX(challenges_created)
FROM
cte
)
OR challenges_created IN (
SELECT
challenges_created
FROM
cte
GROUP BY
challenges_created
HAVING
COUNT(*) = 1
)
ORDER BY
challenges_created DESC
, hacker_id
;
select
hacker_id
, name
, total_number
from
(
select
h.hacker_id
, h.name
, count(*) total_number
, rank() over(order by count(h.hacker_id) desc) rnk
from
hackers h
, challenges c
where
h.hacker_id = c.hacker_id
group by
h.hacker_id, h.name
) handc
where
rnk = 1
union all
select
hacker_id
, name
, total_number
from
(
select
h.hacker_id
, h.name
, count(*) total_number
, dense_rank() over(order by count(*) desc) rnk
, count(count(*)) over(partition by count(*)) cnt
from
hackers h
, challenges c
where
h.hacker_id = c.hacker_id
group by
h.hacker_id, h.name
) hc
where
cnt = 1
and rnk > 1
order by
3 desc
, 1
;
-- 1
SELECT
hacker_id
, name
, totalcount
FROM
(
SELECT
Hackers.hacker_id,
name,
COUNT(challenge_id) AS totalcount,
COUNT(COUNT(challenge_id)) OVER (PARTITION BY COUNT(challenge_id)) as dupes,
MAX(COUNT(challenge_id)) OVER () as max
FROM
Hackers
LEFT JOIN Challenges USING(hacker_id)
GROUP BY
Hackers.hacker_id, name
) B
WHERE
NOT (dupes >1 && totalcount < max)
ORDER BY
totalcount desc
, hacker_id
-- 2
WITH cte AS (
SELECT
h.hacker_id
, name
, COUNT(challenge_id) AS cnt
, COUNT(COUNT(challenge_id)) OVER (
PARTITION BY COUNT(challenge_id)
) AS dup
, MAX(COUNT(challenge_id)) OVER () AS max
FROM
hackers h
JOIN challenges c
USING(hacker_id)
GROUP BY
h.hacker_id
, name
)
SELECT
hacker_id
, name
, cnt
FROM
cte
WHERE
NOT (dup > 1 && cnt < max)
ORDER BY
cnt DESC
, hacker_id
;
with base as (
SELECT a.hacker_id
, COUNT(DISTINCT a.challenge_id) as c_cnt
FROM Challenges a
GROUP BY a.hacker_id
)
SELECT t1.hacker_id
, t2.name
, t1.c_cnt
FROM base t1
JOIN Hackers t2 on t2.hacker_id = t1.hacker_id
WHERE 1 = 1
and (
t1.c_cnt = (SELECT MAX(d1.c_cnt) FROM base d1 )
or
t1.c_cnt NOT IN (
SELECT d2.c_cnt
FROM base d2
GROUP BY d2.c_cnt HAVING COUNT(DISTINCT d2.hacker_id) >= 2
)
)
ORDER BY t1.c_cnt DESC, t1.hacker_id ASC
def solution(s, skip, index):
answer = ''
skip_num = [ord(i)-97 for i in skip]
for i in s:
num = ord(i)-97
for _ in range(index):
num = (num+1)%26
while num in skip_num:
num = (num+1)%26
answer += chr(num+97)
return answer
→ a-z ASCII: 97-122
→ 알파벳은 26글자
def solution(s, skip, index):
answer = ''
abc = [chr(i) for i in range(97, 123) if not chr(i) in skip] * 3
for i in s:
answer += abc[abc.index(i)+index]
return answer
def solution(s, skip, index):
alpha = "abcdefghijklmnopqrstuvwxyz"
answer = ""
for i in list(skip):
alpha = alpha.replace(i,"")
for a in s:
answer += alpha[(alpha.find(a) + index) % len(alpha)]
return answer
from string import ascii_lowercase
def solution(s, skip, index):
result = ''
a_to_z = set(ascii_lowercase)
a_to_z -= set(skip)
a_to_z = sorted(a_to_z)
l = len(a_to_z)
dic_alpha = {alpha:idx for idx, alpha in enumerate(a_to_z)}
for i in s:
result += a_to_z[(dic_alpha[i] + index) % l]
return result
def solution(s, skip, index):
alphas = [chr(a) for a in range(ord("a"), ord("z")+1) if chr(a) not in skip]
return "".join([alphas[(alphas.index(a) + index) % len(alphas)] for a in s])
def solution(s, skip, index):
atoz = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for i in skip:
atoz.remove(i)
ans = ''
for i in s:
ans += atoz[(atoz.index(i)+index)%len(atoz)]
return ans
※ 분산형 차트를 그리기 위해서는 2개 이상의 연속형 변수가 필요
1. 마크는 원으로 설정하고 열, 행에 원하는 연속형 변수 보내기
Country를 세부정보로 보내기
Region을 색상으로 보내고 원의 불투명도와 테두리 설정
Trend Line(추세선)