안녕하세요 선생님~ 해당 문제를 윈도우함수로 풀었는데, submit을 하니 일부 테스트케이스에서 오답으로 되어 질문드립니다. 아래 input에서 id 3이 존재하지 않아, 해당 테이블의 num컬럼을 1,1,null,1,1,2,1 로 정의하고 풀어야 할 것 같습니다.(실제로 expected output에 아무 값도 나오지 않아야 함) 강의에 나오는 쿼리로는 id가 빠져있는 경우를 처리하지 않고, 명시적으로 나와있는 데이터의 연속성만 판단하고 있습니다. 아래와 같은 예외케이스를 포괄할 수 있는 쿼리를 어떻게 짜야할지 조언주시면 감사하겠습니다. 제가 작성한 쿼리도 첨부합니다!
1. WITH 사용하지 않고 FROM으로 묶은 후 쿼리 작성 이어나가기 2. WITH 사용하기 안녕하세요. 위의 두 경우 모두 쿼리 결과는 동일하게 나오는데, WITH를 사용하는 정확한 이유가 오로지 가독성을 위한 것인지, 용량에도 차이가 생기는 것인지 궁금해 질문드립니다. (개인적으로는 문제를 풀 때 바로 묶는 것이 더 편하기 때문에 여쭤봅니다.!)
# [Setting] USE PRACTICE; DROP TABLE Customer; CREATE TABLE Customer (customer_id int, name varchar(20), visited_on date, amount int); INSERT INTO Customer (customer_id, name, visited_on, amount) VALUES (44, 'Ashley', '2019-01-04', 160), (23, 'Sabo', '2019-01-04', 70), (38, 'Moustafa', '2019-01-05', 90), (30, 'Halley', '2019-01-06', 140), (5, 'Elvis', '2019-01-07', 160), (12, 'Leslie', '2019-01-08', 100), (23, 'Sabo', '2019-01-08', 90), (13, 'Will', '2019-01-09', 170), (20, 'Brock', '2019-01-10', 160), (29, 'Leo', '2019-01-10', 90), (33, 'Isaac', '2019-01-11', 60), (46, 'Selena', '2019-01-12', 100), (4, 'Winston', '2019-01-13', 150), (15, 'Marti', '2019-01-13', 160); SELECT * FROM Customer; # [my practice] select b.visited_on, sum(amount) as amount, round(sum(a.amount) /7, 2) as average_amount from customer a inner join (select distinct date_sub(visited_on, interval 6 day) as week_before, visited_on from customer) b on a.visited_on between b.week_before and b.visited_on group by b.visited_on having count(amount) >= 7 order by b.visited_on; 올려주신 방식 외에 inner join시 date 구간으로 조건 넣는 방식으로 시도해 보았습니다. 위 데이터로 삽입하는 경우, MySQL Workbench에서는 예상 결과대로 출력 되는데 leetcode에서 오류가 나서 혹시 제가 코드 상에서 간과하고 있는 부분이 있는지 궁금해서 질문 드립니다. leetcode 내에 PostgreSQL로 유사한 방식의 해결 법은 확인했었는데 혹시나 해서 링크 올려봅니다. https://leetcode.com/problems/restaurant-growth/solutions/5040002/well-explained-postgresql-solution-beats-99
실무 요구사항에서 blob, text, 긴 varchar와 같은 칼럼을 인덱싱하는 경우가 있을까요? 당장 기억나는건 게시글 내용 검색 밖에 생각이 안나네요.. 그리고 요 아래글에 나와있는 prefix index의 한계점도 맞는 말일까요? https://stackoverflow.com/questions/31526618/mysql-prefix-index-vs-index (아래는 챗지피티가 요약해준거라 정확하지 않을 수 있습니다 ㅠ) 인덱스를 통해 "가능한" 행들을 먼저 찾고, 이후 실제 데이터 행을 검색하여 추가 필터링을 수행(두 단계를 거치므로 인덱스를 사용하지 않을때보다 더 많은 시간 소요..?) 2.정렬(sorting)이나 그룹화(grouping) 작업에는 사용되지 않음. ORDER BY 절을 명시적으로 사용하지 않는 한 결과의 순서는 보장되지 않음 커버링 인덱스로 사용 불가
plotly의 treemap 을 사용해서 시각화 하는 경우 Pandas 2.xxxx 버전에서 append 메소드를 지원하지 않아서 treemap api를 이용해 시각화 시도 하는 경우 append를 지원하지 않는다는 오류 메시지를 밷는 경우를 봅니다. 아마도 plotly가 append 메소드 더 이상 지원하지 않는것에 대해서 패치가 이루어지지 않는 버전이어서 그런 경우가 있습니다. 이런 경우는 plotly의 최선 버전으로 재 인스톨 해주시고 실습을 하시면 됩니다. 참고로 저의 실습 버전 plotly 5.7.0 -> 현재는 5.22.0 입니다.
안녕하세요! 좋은 강의 감사드립니다. 도움이 많이 되고 있어요. 5번 문제 관련해서 질문이 있습니다. 5번 문제에 대해서 저는 쿼리를 이렇게 작성했습니다. SELECT generation, COUNT(tp.id) AS pokemon_cnt FROM ( SELECT id, trainer_id, pokemon_id, status FROM `basic.trainer-pokemon` ) AS tp LEFT JOIN basic.trainer AS t ON tp.trainer_id = t.id LEFT JOIN basic.pokemon AS p ON tp.pokemon_id = p.id WHERE t.hometown = 'Incheon' AND tp.status IN ('Active', 'Training') GROUP BY generation ORDER BY pokemon_cnt DESC 강의에서 카일님과 다른 부분은 WHERE 절에 AND 가 더 추가된 부분이에요. 문제에서 '보유하고 있나요?' 라고 물어서 저는 저 조건을 추가해줬는데 카일님은 추가해주시지 않았는데도 제 쿼리와 결과가 같게 나오더라구요. 우연히 인천에 있는 트레이너들의 status가 다 Active, Training 이어서 이렇게 된 것인지 아니면 저 조건이 필요가 없는 것인지 궁금합니당!
안녕하세요. MS SQL server express 설치 부분에서 문제가 발생해서 질문 드립니다. 기본 인스턴스 또는 명명 인스턴스와 상관없이 다음 사진과 같이 데이터베이스 엔진이 설치가 되지 않습니다. 방화벽이 문제 때문이라고 생각하여 1433 포트를 허용하는 인바운드 규칙도 추가하였으나 여전히 설치에 오류가 발생합니다. 혹시 강의 내용과 다른 SQL Server 2022 버전을 설치해서 발생하는 문제일까요? 어떤 점에서 문제가 발생하는 지 잘 모르겠습니다
select a.student_id, a.student_name, a.subject_name, count(e.subject_name) attended_exams from ( select student_id, student_name, subject_name from Students, Subjects # cross join ) a left outer join ( select student_id, subject_name from Examinations ) e on a.student_id=e.student_id and a.subject_name=e.subject_name group by a.student_id, a.student_name, a.subject_name order by a.student_id, a.subject_name; 해당 코드에 select 문에 있는 count(e.subject_name) attended_exams 를 실행할 때, count(a.subject_name) attended_exams 와 같이 cross join을 실행한 subject_name을 기준으로 실행하는 경우에는 0값이 안나오는 결과를 확인했는데 둘의 차이가 궁금합니다.
leetcode 1978번 문제에서 왜 서브 쿼리를 지정해야만 정답이 나올 수 있는지 궁금합니다. 예를 들어, select employee_id from employees where salary < 30000 and manager_id not in(employee_id); 서브쿼리를 지정하지 않고 위와 같이 작성한 경우에는 | employee_id | | ----------- | | 1 | | 11 | 위와 같이 출력 되는데 왜 서브 쿼리를 지정 안 할 경우에는 해당 출력이 나오는지 궁금합니다
안녕하세요, 좋은 강의 잘 듣고 있습니다. 섹션 4 피봇팅 실습 강의 중 정렬 관련해 문의드립니다. 실습예제 : deptno로 group by하고 job으로 pivoting 쿼리 결과 위 부분에 대해서는 이해했습니다. 그런데, 위 쿼리문 하단에 아래와 같이 order by job;을 추가하면 쿼리 결과 처음에는 컬럼 순서에 따라 열 순서가 정해지는 것이라 생각했는데, 쿼리에서 컬럼의 순서를 바꿔도 각 컬럼에 자료가 표시되는 열 번호가 같습니다. 예시) 쿼리 결과 일단 직급의 우열에 따라(salesman - manager - analyst - clerk - president) 정렬한 것으로 파악했습니다. 하지만 테이블 관계도를 살펴봐도 직급에 대해 정렬 기준을 정의한 부분이 없어보여 문의드립니다. job 컬럼을 기준으로 묶었을 때, 직급의 우열을 정의한 바가 없다면 해당 컬럼의 데이터타입에 따라 알파벳 순으로 나와야 하는 게 아닌지 해서 이유가 궁금합니다. 이상입니다.
안녕하세요. 4-5 연습문제 4번 서브쿼리 부분에서 질문이 있습니다. 서브쿼리에 꼭 * 이나 id를 써줘야 실행이 되는 이유는 무엇인가요?? 처음에는 서브쿼리>select에서 카일님 풀이처럼 *를 안 해주고 실행했더니 Unrecognized name: id 라는 오류가 떴습니다. 구글링을 통해 알아보니, 서브쿼리에 id를 안 썼는데 바깥에 COUNT(DISTINCT id) as battle_cnt 를 써줘서 오류가 떴다고 했습니다. 왜 써줘야 하는지 알 수 있을까요??
안녕하세요 좋은 강의 잘 듣고 있습니다. battle 파일 실행 중 문제가 있어 질문 드립니다. google cloud에서 battle파일을 열면 스키마는 나오는데 미리보기가 안됩니다. '표시할 데ㅌ이터가 없습니다'라고 메시지가 뜹니다. 쿼리를 날려도 데이터가 없는 건지 결과가 안 나옵니다. 다른 파일은 다 멀쩡합니다. 파일탐색기에서 battle.csv 열어도 데이터가 잘 있습니다. 혹시 문제에 대해 알고 계신 게 있으신가요? 감사합니다.
SQL 공부하다가 궁금한점이 생겼어요! 실행순서는 group by가 select 보다 먼저 실행되는 것으로 알고 있는데 select절에서 설정한 별칭을 왜 group by절에서 사용해도 되는걸까요? 현업에서는 팀마다 다르겠지만, 보통 어떻게 사용하시나요? 그리고 만약에 안된다면, 서브쿼리를 사용하시나요? 서브 쿼리를 사용하는 이유는 정확히 무엇인가요? 그리고 현업에서도 서브쿼리를 많이 사용하는지 궁금합니다! (아직 서브쿼리가 정확히 왜 필요한지 모르겠어요. 자바스크립트의 클로저라는 개념과 비슷한 개념일까요?) 마지막으로 아래 쿼리가 결과는 똑같은데 어떤게 더 바람직한 작성 방법일까요? (해당 강의는 4-6. 조건문(CASE WHEN, IF)입니다) 감사합니다 :) SELECT new_type1, COUNT(DISTINCT id) AS cnt FROM( SELECT *, CASE WHEN type1 IN ('Rock', 'Ground') OR type2 IN ('Rock', 'Ground') THEN 'Rock&Ground' ELSE type1 END AS new_type1, FROM `basic.pokemon` ) GROUP BY new_type1 SELECT CASE WHEN type1 IN ('Rock', 'Ground') OR type2 IN ('Rock', 'Ground') THEN 'Rock&Ground' ELSE type1 END AS new_type1, COUNT(DISTINCT id) AS cnt FROM `basic.pokemon` GROUP BY new_type1
선생님 어제 알려주신대로 잘 따라했더니 연결 성공했습니다 정말 감사합니다. 한 가지 궁금한 게 더 있는데요! 정규식 사용해서 특수문자 등을 모두 제거하니 공백 문자열이 생겼는데요 trim 이나 is not null 이렇게 해도 null 값이 아니다보니 공백 문자값이 계속 추출이되서요 공백 문자값 자체를 데이터에서 제외하려면 어떻게 해야될까요?
글자가 겹쳐 써지거나, SELECT를 썼을 때 위처럼 파란색이 나타나지 않는 경우가 있어요. 그리고 드래그를 해도 파란색으로 보이지가 않아요. 제가 실수로 어떤 설정을 건드렸을까요? 혹은 제 노트북 내 잘못 설정한 것인지 문제를 발견하기 어려워요. 도와주실 수 있으실까요?