55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
서브쿼리 해커랭스 Challenges 풀이
WITH COUNTER AS SELECT H.hacker_id AS hacker_id, H.name AS name, COUNT(*) AS challenges_created FROM Hackers AS H LEFT JOIN Challenges AS C ON H.hacker_id = C.hacker_id GROUP BY hacker_id SELECT hacker_id, name, challenges_created FROM COUNTER WHERE challenges_created NOT IN (SELECT challenges_created FROM(SELECT * FROM COUNTER GROUP BY challenges_created HAVING COUNT(*)>=2)) OR challenges_created >= (SELECT challenges_created FROM COUNTER ORDER BY challenges_created LIMIT 1) ORDER BY challenges_created DESC, hacker_id; 이렇게 풀면 왜 답이 안나오는지 잘 모르겠습니다.ㅠㅠchallenges_created값이 중복일때 제거해주는 부분 NOT IN 절에 오류가 있는 것 같ㅇ느데 어떤 부분이 틀린걸까요
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
184번 문제 (window함수)
윈도우 함수는 where절에서는 사용할 수 없나요?! SELECT department.name, employee.name, employee.salary, FROM Employee E Inner Join Department D ON E.departmentId = D.id WHERE employee.salary = MAX(salary) OVER(PARTITION BY departmentId) AS max_salary
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
리트코드 184번 테이블 2개
SELECT d.Name AS Department, e.Name AS Employee, e.Salary AS Salary FROM Department d, Employee e WHERE e.DepartmentId = d.Id AND e.Salary IN (SELECT MAX(Salary) FROM Employee WHERE DepartmentId = d.Id)다른 풀이 중에, 테이블을 조인하지 않고 풀었던 예제가 있는데, 잘 이해가 안됩니다 ㅠㅠ FROM절에 2개의 테이블(행과 열이 일치하지 않는)을 나란히 쓸 경우 어떻게 작동되는걸까요?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
(LeetCode.627) IF문 보다 CASE문의 실행시간이 왜 더 빠른가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.CASE문으로 실행했을 때는 241ms, IF문으로 실행했을 때 280ms로, CASE문이 더 빨랐습니다.저는 CASE문의 구조가 더욱 복잡해 시간이 더 오래 걸릴 것이라 생각하고 IF문으로 돌려봤는데 오히려 이게 더 느리네요. 그 이유를 알 수 있을까요?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
같은 답안을 작성한것 같은데... 오류가 발생했습니다. 어디서 오류가 발생했는지 알 수 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
서브쿼리 에러 관련 질문 있습니다! (해커랭크 the report 문제 )
select case when grades > 7 then name else "null" end as "Name", grades, marksfrom (select * from students s, grades g where s.marks between g.min_mark and max_mark) sub작성시 아래와 같은 에러가 발생해서요 ㅠ from 절에 서브쿼리 사용시 자주 보이는 에러라 여쭤봅니다!ERROR 1054 (42S22) at line 7: Unknown column 'grades' in 'field list'
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
똑같이 작성했는데 오류가 발생합니다 ㅠ
with counter as ( select hackers.hacker_id , hackers.name , count(*) as challenges_created from Challenges inner join Hackers on Challenges.hacker_id = Hackers.hacker_id group by hackers.hacker_id, hackers.name)계속 아래와 같은 오류가 발생합니다 ㅠㅠㅠ Msg 102, Level 15, State 1, Server dbrank-tsql, Line 8Incorrect syntax near ')' 란 오류가 자꾸 발생합니다 ㅠㅠ
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
Leetcode 196. Delete Duplicate Emails 서브쿼리 관련
안녕하세요! Leetcode 196. Delete Duplicate Emails 문제 관련해서 질문 드립니다.강의에서는 서브쿼리를 두 번 사용했는데 아래와 같이 where 절에 다중컬럼 서브쿼리를 사용해서 서브쿼리를 한 번만 사용할 수는 없는 걸까요? "You can't specify target table 'Person' for update in FROM clause" 같은 에러가 납니다. delete from Person where (email, id) not in ( select email, min(id) as min_id from Person group by email)
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
lead가 아닌 lag로 해도 동일해보이는데요
SELECT DISTINCT lags.num1 AS ConsecutiveNumsFROM (SELECT id, num AS num1, lag(num) OVER(ORDER BY id) AS num2, lag(num,2) OVER(ORDER BY id) AS num3 FROM logs ) AS lagsWHERE lags.num1 = lags.num2 = lags.num3 으로 하면 1과 2가 나오네요 ㅎㅎ ㅠ FROM 절 서브쿼리만 따로 돌려봤을 때에도 num1~3이 모두 같은건 1밖에 없고 테이블을 심플하게 엑셀로 생각해봐도 lead나 lag나 다를게 없어보이는데 최종적으로 돌려볼때는 자꾸 1,2가 모두 나와서요
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
오라클
오라클 정규표현식에 대한 튜토리얼도 해당 사이트의 내용으로 보면 되는건가요?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
department highest salary - rank() over 사용한 문제 질문
안녕하세요! 해당 문제를 rank() over 로 풀어보았는데 runtime error가 계속 발생해서 뭐가 틀렸는지 알 수가 없더라고요..ㅜ 아래와 같이 풀었는데 어떤 부분에서 안되는 것인지 확인 부탁드립니다!!ㅠ SELECT ms.department ,ms.name AS Employee ,ms.salary FROM(SELECT Employee.name ,salary ,RANK(salary) OVER(PARTITION BY departmentId ORDER BY salary DESC) AS rank ,Department.name AS department FROM Employee INNER JOIN Department ON Employee.departmentId = Department.id ) ms WHERE ms.rank == 1;
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
Dense_rank를 활용한 풀이법 문의
안녕하세요~ 177번 문제를 dense_rank를 활용해 풀어보고 싶어서 아래와 같이 코드를 작성했는데요. 오류와 함께 정답처리되지 않습니다. 어떤 부분이 잘못되었는지 알려주시면 감사하겠습니다! (MySQL ver) ▼코드 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INTBEGIN RETURN ( SELECT CASE WHEN sub.rank = N THEN sub.salary ELSE NULL END AS getNthHighestSalary(N) FROM( SELECT id , salary , DENSE_RANK() OVER (ORDER BY salary DESC) AS rank FROM Employee ) sub );END ▼오류내용 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' RETURNS INTBEGIN RETURN ( SELECT CASE WHEN sub.rank ' at line 17
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
강의 내 코드 관련 문의드립니다.
안녕하세요~ 강사님께서 작성하신 코드는 함수를 정의하는 코드라 N값이 지정되어있지 않은데요! 그럼에도 해당 코드를 Submit시 답변처리 되는 이유가 뭘까요??SELECT getNthHighestSalary(2) 까지 작성해야 답변 처리되어야 하는게 아닐지 궁금합니다.
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
left join을 통해 문제를 풀었는데 질문이 있어요.
안녕하세요 선생님. 저는 선생님께서 풀이하셨던 방법을 생각하지 못해서 1) group by email을 하여 min(id)구하기 --> P2 2) from Person P left join P2 on P.id = P2.min(id) 3) left join을 할 시, P2에는 Null인 경우가 발생하므로 --> where P2.id Is NULL인 경우 필터링 해주기 위에 단계로 문제를 풀어서 답을 accepted 받았어요! 그런데 데이터 분석을 공부를 하다보니 꼭 left join이 필요한 경우가 아니라면 쓰지 않는 것이 데이터 분석 툴 성능을 위해 좋다는 블로그 글을 보았어요. 그러면 데이터 분석을 할 때 최대한 inner join을 하는 방향으로 쿼리를 짜주는 것이 좋을까요? 질문이 너무 길어졌네요. 답변 해주시면 감사드릴게요..! (아래는 제가 짠 쿼리 입니다) delete P1from Person P1 left join (select email , min(id) min_id from Person group by email ) P2 on P1.id = P2.min_idwhere P2.min_id IS NULL;
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
row_number() 를 이용하여 풀어도 되나요?
안녕하세요 좋은 강의 감사합니다. 사실 제가 DML 구문들을 먼저 skip하고 뒤에 subquery부분부터 강의를 들어서 윈도우 함수를 배워온 상태에요. 그래서 혹시 아래 쿼리를 사용하여 문제를 풀었는데, 사용하는데 문제가 없을까요? leetcode에서는 답이 맞았다는 메세지를 받았습니다! delete from Personwhere id IN (select a.id -- rn이 1일 아닐 때의 경우만 id 고르기from ( select * , row_number() over (partition by email order by id) rn from Person ) awhere rn != 1 );
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
drop 질문
안녕하세요 선생님. 혹시 drop 기능은 DML에 포함이 되지 않는 걸까요?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
셀프조인에서 LEFT vs INNER JOIN 차이
안녕하세요, DELETE 문제 풀이에서 강사님은 INNER JOIN으로 풀이주셨는데요. INNER JOIN 대신 LEFT JOIN을 사용해도 정답이 되는 거 같네요. 원래 모든 SELF JOIN 시에는 LEFT = INNER로 생각해도 될까요? 아직 LEFT JOIN / INNER JOIN이 바로 머릿속에 그려지지 않다보니 케이스 by 케이스인지, 셀프조인 시 LEFT = INNER인지 헷갈리네요 감사합니다.
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
누적합 질문입니다.
join과 group by 를 활용하여 window fuction과 동일한 누적합을 만드는 쿼리에서 GROUP BY e1.Line으로 쿼리를 작성하면 안되나요 ? group by 1,2,3,4로 적으면 각 e1.Line열의 value로 적은 것인데 이렇게 value로 적어도 가능한건가요 ?
- 미해결[백문이불여일타] 데이터 분석을 위한 고급 SQL
e.salary = dh.max_salary 이걸 왜 해야하나요? ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이해가 안되는 부분이 있어 질문드립니다! 왜 employee테이블의 salary와 dh의 max_salary를 같다고 하여 inner join을 하는지 이해가 안되네요 ㅠㅠ 왜 e.salary = dh.max_salary 이것도 inner join에 넣어야 하나요?ㅠㅠ
- 해결됨[백문이불여일타] 데이터 분석을 위한 고급 SQL
해커랭크 Top Earners 문제 답답합니다 ㅜㅜ
변수 명명이 헷깔립니다. 1. WHERE절에 서브쿼리를 할때 SELECT months*salary , count(*) FROM Employee WHERE months*salary = (SELECT MAX(months *salary) FROM Employee) GROUP BY months*salary 이렇게 months*salary를 따로 명명해주지 않아도 잘 돌아갑니다. 그런데 SELECT months*salary AS earnings, count(*) FROM Employee WHERE earnings = (SELECT MAX(months *salary) FROM Employee) GROUP BY earnings 이런식으로 WHERE과 GROUP BY에 earnings라고 명명한 변수를 쓰면 에러가 납니다. 그 이유를 모르겠습니다. 2. 그런데 HAVING 절에 서브쿼리를 쓰는 경우는 이와 반대가 됩니다. SELECT months*salary AS earnings, count(*) FROM Employee GROUP BY earnings HAVING earnings = (SELECT MAX(months*salary) FROM Employee) 이렇게 GROUP BY와 HAVING에 earnings라고 명명한 변수를 주면 잘 돌아갑니다. 그런데 SELECT months*salary , count(*) FROM Employee GROUP BY months*salary HAVING months*salary = (SELECT MAX(months*salary) FROM Employee) 이렇게 이름을 따로 명명해주지 않으면 안돌아갑니다. 명명부분이 너무 어렵습니다ㅜㅜ 도와주세요