WITH rpt_cnt AS (
SELECT
managerID AS manager_id
, IFNULL(COUNT(managerId), 0) AS cnt
FROM
employee
GROUP BY
managerId
)
SELECT
name
FROM
employee e
JOIN rpt_cnt r
ON e.id = r.manager_id
WHERE
cnt >= 5
;
→having 쓰면 더 간단하게 풀림
SELECT
e1.name
FROM
employee e1
JOIN employee e2
ON e1.id = e2.managerId
GROUP BY
e1.id
HAVING
COUNT(e2.managerId) >= 5
;
→ COUNT(*)
, COUNT(e2.name)
도 가능
SELECT E1.name
FROM Employee E1
JOIN (
SELECT managerId, COUNT(*) AS directReports
FROM Employee
GROUP BY managerId
HAVING COUNT(*) >= 5
) E2 ON E1.id = E2.managerId;
SELECT name
FROM Employee
WHERE id IN (
SELECT managerId
FROM Employee
GROUP BY managerId
HAVING COUNT(*) >= 5)
def solution(arr):
answer = []
if len(arr) == 1:
answer.append(-1)
else:
answer = arr
answer.remove(min(arr))
return answer
→ min() 함수를 안 쓰고 풀고 싶어졌음
def solution(arr):
answer = []
if len(arr) == 1:
answer.append(-1)
else:
element_min=arr[0]
for i in arr:
if element_min>i:
element_min=i
answer = arr
answer.remove(element_min)
return answer
→ arr에 가장 작은 수가 중복으로 있는 경우와 arr가 빈 배열인 경우(문제에서는 배열 길이가 1 이상이라고 했기 때문에 사실 고려하지 않아도 되긴 함)도 고려해고 싶어졌음!
def solution(arr):
answer = []
if len(arr) == 1 or len(arr) == 0:
answer.append(-1)
else:
element_min=min(arr)
for i in arr:
if i>element_min:
answer.append(i)
return answer
def solution(arr):
arr.pop(arr.index(min(arr)))
return arr
→ pop을 이렇게 쓰면 메모리 낭비라는 코멘트 있었음
def rm_small(mylist):
return [i for i in mylist if i > min(mylist)] or [-1]
→ 리스트의 길이만큼 min 함수를 반복 실행하기 때문에 굉장히 비효율적인 코드라고 함(시간복잡도가 O(N*N))
→ 왜? min을 하면 최소값을 찾기 위해, 자체적으로 for문을 돌기 때문!