게시글
질문&답변
2023.10.13
업데이트 구문
안녕하세요, 답변 드립니다.DML 관련 리트코드 문제에서 동일한 오류가 발생하고 있는데, 아마 test case에 문제가 있는 것으로 추정됩니다. Run Code 대신 Submit을 바로 해보시는 것을 권장드립니다. 만약 쿼리에 오류가 없다면, Accepted 되는 것을 확인하실 수 있습니다 :)
- 3
- 1
- 240
질문&답변
2022.05.20
셀프조인에서 LEFT vs INNER JOIN 차이
안녕하세요, 답변 드립니다. 우선 질문 주신 내용은 경우에 따라 다르며, 이 문제에서는 INNER JOIN 으로 SELF JOIN 을 하는 것과 LEFT JOIN 으로 SELF JOIN 을 하는 것의 결과가 동일합니다. 여기에서는 person 이라는 테이블의 email 컬럼으로 SELF JOIN 을 하였는데요, joinkey로 사용되는 두 컬럼에 동일한 값이 들어있기 때문에 INNER JOIN 과 LEFT JOIN 의 차이가 없습니다. 결과가 달라지는 경우는, 들어있는 값이 다른 컬럼을 joinkey로 사용하여 SELF JOIN 을 한 경우입니다. 아래 참고 문서에서 관련 예시를 보실 수 있으며, 같은 조건으로 INNER JOIN 을 했을 때와 LEFT JOIN 을 했을 때 결과에 차이가 있는 것을 확인 하실 수 있습니다. [MySQL TUTORIAL] MySQL Self Join 이해에 도움이 될 수 있도록 LEFT JOIN 관련 문서도 함께 전달 드립니다 :) [MySQL TUTORIAL] MySQL LEFT JOIN
- 0
- 1
- 718
질문&답변
2022.05.19
누적합 질문입니다.
안녕하세요, 답변 드립니다. GROUP BY 혹은 ORDER BY 절에는 SELECT 절에 적는 컬럼명 대신 숫자를 적을 수도 있습니다. 해당 설명의 GROUP BY 1,2,3,4는 Line 컬럼의 값을 의미하는 것이 아니라, SELECT 절에 적힌 컬럼을 의미합니다. 따라서 설명의 GROUP BY 1,2,3,4 는 GROUP BY e1.Id, e1.Name, e1. kg, e1.Line 과 같은 의미입니다. 본 내용은 영상의 8:25 부분에서도 설명을 들으실 수 있습니다 :)
- 0
- 1
- 231
질문&답변
2022.05.19
e.salary = dh.max_salary 이걸 왜 해야하나요? ㅠㅠ
안녕하세요, 답변 드립니다 :) 우선 dh 서브쿼리를 만든 이유는 각 부서별로 salary의 최댓값을 알기 위함인데요. 1) 각 부서별로 2) 최대 salary에 해당하는 3) 직원의 정보를 가져와야하기 때문에, department 와 max_salary를 기준으로 dh 와 employee 테이블과 JOIN 하였고, SELECT 절에서 그 직원의 name, salary 값을 가지고 왔습니다. 즉, dh 서브쿼리는 부서별 최대 salary를 알기 위해 사용하였고, 여기에서 알게 된 부서별 최대 salary를 다시 employee 테이블과 JOIN 하여 그 부서에서 해당 salary를 가진 직원의 정보를 가지고 오는 문제였습니다.
- 1
- 1
- 247
질문&답변
2022.05.13
해커랭크 Top Earners 문제 답답합니다 ㅜㅜ
안녕하세요, 답변 드립니다. 우선 MySQL 에서는 GROUP BY, HAVING, ORDER BY 절에서 Alias 를 사용하실 수 있고 WHERE 절에서는 사용하실 수 없습니다. WHERE 절에서 사용할 수 없는 이유는 쿼리 실행 순서와 관련이 있는데요, WHERE 절이 실행된 이후에 SELECT 절이 실행되기 때문에 SELECT 절에서 정의한 Alias는 WHERE 절에서 사용할 수 없습니다. [MySQLTUTORIAL] MySQL Alias MySQL에서는 SQL 표준 문법과 다르게, HAVING 절이 FROM (JOIN), WHERE, GROUP BY, SELECT 이후에 실행됩니다. 따라서 HAVING 절에서는 SELECT 절에서 정의한 Alias를 사용해주셔야 합니다. [MySQLTUTORIAL] GROUP BY [MySQLTUTORIAL] HAVING 참고 하실 문서를 첨부하였으니 이해에 도움이 되길 바라겠습니다 :)
- 2
- 3
- 334
질문&답변
2022.05.12
안녕하세요 리트코드 184번 문제 관련하여 질문드립니다.(알리아스 관련)
안녕하세요, 답변 드립니다 :) 1. 알리아스 관련 적어주신 첫번째 쿼리에서 Employee 테이블에 알리아스를 E 라고 적용하지 않은채로 SELECT 절에 사용하여 오류가 발생한 것으로 보입니다. FROM Employee AS E 와 같이 적용하신 후, 첫번째 쿼리와 동일하게 SELECT 절을 적어주시면 오류 없이 동작합니다. 2. 다중컬럼 서브쿼리 관련 https://www.inflearn.com/questions/43204아마 이 질문과 관련된 내용을 질문 주신 것 같은데요, WHERE Salary IN (SELECT MAX(Salary) FROM Employee GROUP BY DepartmentId) 와 같이 작성하면, 출력된 MAX(Salary)가 어떤 부서의 값인지 모르기 때문에 오류가 발생합니다. 따라서 DepartmentID도 함께 매칭될 수 있도록 풀이하신 것처럼 다중컬럼 서브쿼리를 이용해야 합니다.
- 1
- 1
- 211
질문&답변
2022.05.04
해당 문제 JOIN 관련 질문 드립니다.
안녕하세요, 질문 주신 내용에 두 가지 내용이 들어있어 나눠서 답변 드립니다 :) 1. 첫 번째 쿼리 SELECT 절에서 집계함수를 사용하실 때는 집계함수 앞에 있는 모든 컬럼을 GROUP BY 에 적어주셔야 해당 컬럼들을 기준으로 정확하게 집계가 됩니다. GROUP BY 절에 Employee.name 을 적어주지 않아서, Joe의 salary가 90000 이 아님에도 잘못 출력된 것을 보실 수 있습니다. 아마 Joe 가 가장 처음에 있는 이름이라 출력된 것으로 보이고요. 일단 해당 쿼리에서는 Department.name으로 GROUP BY 가 먼저 되기 때문에 각 부서 salary의 최댓값을 출력합니다. 따라서 해당 쿼리의 결과값으로는 각 부서의 최대 salary 한 개씩, 총 두 행이 출력됩니다. 2. 두 번째 쿼리 해당 쿼리에서는 joinkey로 사용되는 Employee.departmentID와 Department.id 모두 1 또는 2로 동일하게 구성되어 있기 때문에 INNER JOIN, LEFT JOIN 의 결과가 동일합니다. 아마 실행 시 오류가 있었던 것 같은데, 다시 실행해보시면 동일한 값이 출력되는 걸 보실 수 있을 거예요.
- 0
- 1
- 208
질문&답변
2022.05.03
서브쿼리를 사용하지 않으면 성능이 떨어지나요?
안녕하세요, 답변 드립니다. 문의주신 내용의 경우 성능보다는 추출 정확도와 관련이 있습니다.이 문제처럼 months*salary의 최댓값이 1개이기 때문에 LIMIT 1을 써서 추출해도 됩니다. 하지만 1위가 여러 개인 경우에는 LIMIT 사용 시 정확히 추출이 되지 않기 때문에 서브쿼리와 같이 다른 방식을 사용해야 합니다. 예시 - 상품 카테고리 별 주문 수(주문 수가 가장 많은 카테고리를 추출할 경우 A,B 가 모두 출력되어야 하지만 LIMIT 1을 사용할 경우 A또는 B 만 출력.) 카테고리 주문 수 A 1,000 B 1,000 C 500
- 0
- 1
- 294
질문&답변
2022.04.20
select에서 활용하여 해당문제를 해결하는 쿼리 문의드립니다.
안녕하세요, 답변 드립니다. 본 문제는 UPDATE를 사용해서 풀어야 하는 문제로, 설명에서도 SELECT 구문 대신 UPDATE 구문을 사용 할 것을 명시하고 있습니다 :) Note that you must write a single update statement, do not write any select statement for this problem.
- 0
- 1
- 152
질문&답변
2022.04.11
ERD 카테고리, 데이터 타입 강의 ERD 구성에 관하여 궁금한게 있어서 질문드립니다.
안녕하세요, 답변 드립니다 :) 해당 부분은 강의를 위해 임의로 작성되었으며, 일반적으로 DB에서 많이 사용되는 데이터 타입에 따라 표기하였습니다. 데이터 적재 시 사용되는 데이터 타입의 가이드라인은 아래 문서에서 확인하실 수 있습니다. [W3School] SQL Data Types for MySQL, SQL Server, and MS Access
- 0
- 1
- 333