묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결데이터 분석 SQL Fundamentals
혹시 실무에서는 칼럼에 comment를 달아서 관리하나요?
칼럼명만 가지고 이게 어떤 의미인지 바로 파악이 어려운데, 보통 실무에서는 한글로 어떤 의미인지 comment를 달아놓나요?
-
해결됨SQL Server 컨설턴트가 알려주는, 쿼리 능력 레벨업(고급 T-SQL 쿼리)
Merge 사용시 임시테이블 사용 가능 유무 문의
실무에서 MERGE를 사용해보려고 임시테이블에 MERGE를 적용하였더니 오류가 계속 발생 하였습니다. 혹시 MERGE는 임시테이블에서는 사용할 수 없는 건가요?
-
해결됨SQL Server 컨설턴트가 알려주는, 쿼리 능력 레벨업(고급 T-SQL 쿼리)
RANGE에 대해서 질문드립니다
이전 수업에서 RANGE가 기본이라고 적혀 있었는데 FRAME단에 RANGE로 BETWEEN을 하는 것과 ORDER BY까지만 선언하는 것과 차이가 있나요?
-
해결됨SQL Server 컨설턴트가 알려주는, 쿼리 능력 레벨업(고급 T-SQL 쿼리)
안녕하세요 파생 테이블과 CTE 성능에 관련된 질문입니다.
우선 강의 잘 듣고 있습니다 :)간단한 질문인데 파생 테이블과 CTE는 무조건 하나를 골라서 사용하는 것이 아닌건 강의를 통해서 알겠는데 이 두 기능의 유의미한 성능 차이는 없나요? 지금까지는 계속 파생 테이블 형태로 쿼리를 짜왔는데 성능 차이가 없거나 CTE가 우위에 있다면 불필요하게 파생 테이블로 중복 작성되어있던 쿼리를 CTE로 바꾸려고요
-
미해결[백문이불여일타] 데이터 분석을 위한 고급 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 Fundamentals
join 실습 관련 질문 있습니다.
안녕하세요! 강의 정말 잘 듣고 있습니다!!!!본 영상에서 첫번째 예시로 기간 범위에 따른 조회(1997년 주문)를 예시로 들어주셨는데 -- 강사님 예시 SELECT a.contact_name, a.address, b.order_id, b.order_date, b.shipped_date, b.ship_address FROM customers a JOIN orders b ON a.customer_id = b.customer_id WHERE a.contact_name = 'Antonio Moreno' AND b.order_date BETWEEN to_date('19970101', 'yyyymmdd') AND to_date('19971231', 'yyyymmdd');그런데 기간 범위를 설정할 때 1년 범위 설정 쿼리가 너무 길어보여서 다른 function들을 찾아서 적용해보았습니다.-- 수정1 SELECT a.contact_name, a.address, b.order_id, b.order_date, b.shipped_date, b.ship_address FROM customers a JOIN orders b ON a.customer_id = b.customer_id WHERE a.contact_name = 'Antonio Moreno' AND date_part('year', b.order_date) = '1997';(물론 이쪽은 연도나 월 등 딱 하나만 인덱싱이 가능하니 한계는 있어보이네요.)혹은-- 수정2 SELECT a.contact_name, a.address, b.order_id, b.order_date, b.shipped_date, b.ship_address FROM customers a JOIN orders b ON a.customer_id = b.customer_id WHERE a.contact_name = 'Antonio Moreno' AND b.order_date BETWEEN '1997-01-01' AND '1997-12-31';이렇게 작성해도 결과물은 같긴 하더라고요.강사님이 들어주신 예시의 to_date()는 검색해보니 대부분 오라클에서 많이 언급되는 것 같은데,이쪽 쿼리가 더 범용적으로 사용되기에 사용하신 것인지, 아니면 다른 function도 딱히 문제는 없는 것인지 궁금합니다.강의 최고입니다!! 감사합니다.
-
미해결[백문이불여일타] 데이터 분석을 위한 중급 SQL 문제풀이
Set 3 . 4번 문제 풀이
왜 having 뒤에 붙는 count 구문에 distinct를 넣어야 하나요? 그냥 count(s.submission_id) 를 넣으면 안되는지 궁금합니다.
-
미해결직접 활용할 수 있는 SQL - 기초부터 실무 활용까지
실무에서 외래키를 사용하지 않는 이유가 궁금합니다.
안녕하세요, 외래키 내용을 설명해주시면서 실무에서는 외래키를 사용하지 않고, 참조 관계에 있는 테이블만 명시한다고 하셨는데 그 원인이 궁금합니다.
-
해결됨실무에 바로 쓰자! 이커머스 데이터로 배우는 실전 SQL 분석
sql파일 불러오기가 안됩니다.
주문데이터분석에 첨부되어있는 자료이구요, 이미지처럼 syntax error가 뜨며 롤백한다고 하고 안 불러와집니다;
-
해결됨다양한 사례로 익히는 SQL 데이터 분석
pandas 연계부분
안녕하세요. 현재 실습대로 판다스 연계부분을 하고 있는데 오류가 떠서 되지가 않습니다. 해결법을 모르겠습니다.
-
미해결데이터 분석 SQL Fundamentals
두 날짜간의 기간 계산 sql 문의 드립니다.
안녕하세요 선생님 휴일(주말, 공휴일 등) 테이블을 별도로 가진 상태에서 두 날짜간의 기간을 계산할 때 휴일을 제외하여 계산하고 싶은데 방법을 잘 모르겠습니다 도움 부탁드립니다 ㅠㅜ (엑셀로 치면 networkdays 함수를 sql 로 구현하고 싶습니다.) <table A - 주문정보> prod_id order send period a 22.05.02 22.05.12 b 22.04.28 22.05.11 c 22.05.09 22.05.17 d 22.04.26 22.05.10 <table B - 휴일정보> date day hol_gubun wrk_gubun 22.04.24 일 휴일 0 22.04.25 월 평일 1 22.04.26 화 평일 1 22.04.27 수 평일 1 22.04.28 목 평일 1 22.04.29 금 평일 1 22.04.30 토 휴일 0 22.05.01 일 휴일 0 22.05.02 월 평일 1 22.05.03 화 평일 1 22.05.04 수 평일 1 22.05.05 목 휴일 0 22.05.06 금 평일 1 22.05.07 토 휴일 0 22.05.08 일 휴일 0 22.05.09 월 평일 1 22.05.10 화 평일 1 22.05.11 수 평일 1 22.05.12 목 평일 1 22.05.13 금 평일 1 22.05.14 토 휴일 0 22.05.15 일 휴일 0 22.05.16 월 평일 1 22.05.17 화 평일 1 22.05.18 수 평일 1 22.05.19 목 평일 1 22.05.20 금 평일 1 22.05.21 토 휴일 0
-
해결됨실무에 바로 쓰자! 이커머스 데이터로 배우는 실전 SQL 분석
csv 불러왔을때 string으로 인식해서 숫자함수 안먹히는 문제
안녕하세요 저는 일단 전에 쓰던 dbeaver를 쓰고 있구요 sqlite 쓰려니까 설치완료후에 프로그램이 안보이더라구요 dbeaver 쿼리문에서 캡쳐드린 파일화면에서처럼 select * from 상품정보 where item_price > 15000 이라고 입력하면 아무 결과도 안나오고 행이름만 나오는데 열 형식이 string으로 지정되어서 그런것일지요.. 해결방법이 궁금합니다 (전강의에서 csv파일에서 쉼표지우는거는 시도를 이미 했어서요)
-
미해결다양한 사례로 익히는 SQL 데이터 분석
일별 잔존율 SQL 로직에서 궁금증이 있습니다.
안녕하세요. 강사님의 강의를 잘 듣고 있는 와중, 일별 잔존율 SQL문에서 궁금증이 생겼습니다. SQL 로직을 보면 사용자 테이블과 세션 테이블을 left join 한 다음, 사용자 아이디, 생성일자, 방문일자로 그룹화하고, 다시 생성일자로 그룹화 한 후 생성일 기준 고유 사용자 수와 D+N 별 고유 사용자 수를 구하는 것으로 이해했습니다. 다만 세 컬럼으로 그룹화를 하게 되면, 아이디 생성일자 방문일자 U0179281 2016-10-24 2016-10-25U0179281 2016-10-24 2016-10-26 와 같은 케이스가 나오게 되는데, 이를 다시 생성일자로 그룹화한 다음 count(*) 로 생성일 기준 모수를 구하게 되면 사용자 아이디는 중복으로 집계되는 것이 아닌지 궁금합니다. 생성일 기준 고유 사용자 수(모수)를 구하려면 10월 24일에 생성한 사용자 U0179281 1개만 집계되어야 하는게 아닌가 싶어 질문드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
join 관련 질문입니다.
안녕하세요. 강의 잘 듣고 있습니다. 다음과 같이 여러 테이블을 join 후 하나의 row를 뽑아내려고 하는데 성능은 어떻게 나오는지 궁금합니다. select * from table1 inner join table2 on table1.xxx = table2.XXX inner join table3 on table2.XXX = table3.xxx where table1.nnn = NNN 이렇게 되어있을 때 전체가 다 join이 된 후 where 조건을 테스트 하게 된다면 데이터가 많을 경우 성능이 떨어질 것 같아서요. where 조건으로 먼저 필터링 한다면 금방 끝날 거 같긴한데 DB의 동작은 어떻게 처리되는건가요? 1. where 로 필터링이 되면서 join 되는것인지 아니면 join 완료 후 where로 필터링되는것인지 궁금합니다. 2. join의 횟수를 네다섯번씩 걸어도 성능에 무리가 없을까요? 3. 위 경우 한개의 컬럼만 찾으려면 limit을 추가해 주는게 나을까요? 1개 찾았을 때 전부 다 loop를 돌지 않고 빠져나가면 빠를거 같긴한데요. 확인 부탁드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
데이터베이스 원리는 CAP이론을 비유하여 설명하신 건지 궁금합니다.
안녕하세요. 루키스님! 질문이 있는데요. "데이터베이스 원리" 챕터 강의는 CAP 이론을 물류 창고로 비유하여 설명하신 것 같습니다. 만약 그렇다면 3가지 항목이 다음과 같이 연결되는 것이 맞는지 궁금합니다. 1) 많이 - 네트워크 파티션 허용(Partition tolerance) - 2개의 물류 창고로 운영하면 많은 물건을 처리할 수 있지만 하나의 물류창고가 피해를 입어도 다른 하나를 사용할 수 있다고 생각합니다. 2) 빠르게 - 가용성(Availability) - 창고에서 언제나 물건을 꺼낼 수 있는 상황이라면 빠르 처리가 가능할 것으로 생각합니다. 3) 안전하게 - 일관성(Consistency) - 창고에서 꺼낸 물건이 정확하다는 것이 안전한 것이라고 생각합니다.
-
미해결[백문이불여일타] 데이터 분석을 위한 SQL 실전편 (무료 미니 코스)
쿼리 오류 문의드립니다.
SELECT DATE_TRUNC('week', e1.occurred_at) AS week , COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e1.user_id ELSE NULL END) AS weekly_digest_email , COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e2.user_id ELSE NULL END) AS weekly_digest_email_open , COUNT(CASE WHEN e1.action = 'sent_weekly_digest' THEN e3.user_id ELSE NULL END) AS weekly_digest_email_clickthrough FROM tutorial.yammer_emails e1 LEFT JOIN tutorial.yammer_emails e2 ON e2.occurred_at BETWEEN e1.occurred_at AND e1.occurred_at + INTERVAL '5 MINUTE' AND e2.user_id = e1.user_id AND e2.action = 'email_open' LEFT JOIN tutorial.yammer_emails e3 ON e3.occurred_at BETWEEN e1.occurred_at AND e1.occurred_at + INTERVAL '5 MINUTE' AND e3.user_id = e1.user_id AND e3.action = 'email_clickthrough' WHERE occurred_at BETWEEN '2014-06-01 00:00:00' AND '2014-08-31 23:59:59' AND action IN ('sent_weekly_digest', 'sent_reengagement_email') GROUP BY week; 야머스 차트로부터의 쿼리말고 강의때 작성해주신 쿼리로피봇테이블까지 작성해보고 싶은데 자꾸 오류가 나서요쿼리문 혹시 따로 올려주실 수 있으실까요?
-
미해결데이터 분석 SQL Fundamentals
max(b.category_id) 관련 질문이 있어요
안녕하세요 오늘도 좋은 강의 감사합니다. 다름이 아니라 첫번째 with temp_01 as 쿼리를 시작하시는 부분에 질문이 있어요. 처음에 group by를 하실 때, product_id만 하시고 categroy_id는 크게 할 필요가 없으시다는 말씀을 하셨던 부분 이해를 완료했습니다. 그런데 선생님의 강의를 듣기 전에, 제가 문제를 먼저 풀었을 때 저는 group by에 category_id도 같이 추가를 하여 문제를 풀었습니다. 확인해보니 답은 동일하게 나왔더라고요. 그럼 제가 했던 방식으로 하여도 전혀 문제가 없는 것일까요? 혹시 몰라 제가 짰던 쿼리를 밑에 남겨놓겠습니다! (일부 알리아스 이름은 선생님께서 하신 부분과 비슷하게 맞춰놓았습니다) with temp_01 as ( select p.category_id , p.product_id , sum(oi.amount) sum_by_product -- 상품별 총합 from nw.order_items oi join nw.products p on oi.product_id = p.product_id group by p.category_id, p.product_id ), temp_02 as ( select category_id , product_id , sum_by_product , sum(sum_by_product) over (partition by category_id) sum_by_category -- category별 총합 , row_number() over (partition by category_id order by sum_by_product desc) ranking_category -- 카테고리별 상품 순위 from temp_01 ) select * from temp_02 where sum_by_product >= 0.05*sum_by_category and ranking_category <= 3 order by category_id;
-
미해결Database - SQL
해당 강의 뒤쪽 부분이 조금 잘린 것 같은데
수정이나 재업로드 해주실 수 있으실까요?
-
해결됨데이터 분석 SQL Fundamentals
레벨이라는 표현이 정확히 무엇을 의미하는건가요?
안녕하세요, "조인 개요 및 조인 시 데이터 집합 레벨의 변화 이해 - 01 강의"를 듣다가 어느순간 "레벨"이라는 표현이 나옵니다. 정확히 이 "레벨"이라는 표현이 무엇을 의미하는지 잘 모르겠습니다.
-
미해결다양한 사례로 익히는 SQL 데이터 분석
count(*)와 count(distinct order_id)의 차이점이 궁금합니다.
훌륭한 강의를 듣고 있는 와중에 궁금점이 생겼습니다. group by 를 수행한 후에 주문 건수를 집계할 때 count(*) 함수 혹은 count(distinct order_id)를 사용하시던데, 주문 번호가 중복되어있을 경우에는 distinct 함수를 통해 중복을 제거후 count() 집계를 사용해야 된다고 알고 있습니다. 그런데 order별 특정 상품 주문시 함께 가장 많이 주문된 다른 상품 추출하기 쿼리에서, select prod_01, prod_02, count(*) from temp_01 group by prod_01, prod_02 부분을 보면 count(*)를 사용한 것이 이해가 잘 가지 않습니다 ㅠㅠ 그 앞의 temp_01 절에서 ga.order_items 테이블을 사용하는 데 해당 테이블에는 order_id가 중복되어 있는 것으로 알고 있습니다. 그러면 후에 건수 집계시 count(distinct temp_01.order_id)로 해야 하는 것이 아닌가 궁금합니다. 아니면 count(*)의 의미가 애초에 주문 건수를 의미하는 것이 아닌지 궁금합니다. 늘 수고 많으십니다.