묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
[바짝스터디 2주차 과제] 윈도우 함수 연습 문
1. 탐색 함수 연습 문제-- 문제1. user들의 다음 접속 월과 다다음 접속 월을 구하는 쿼리를 작성하세요. SELECT *, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) as lead_visti_month, LEAD(visit_month, 2) OVER(PARTITION BY user_id ORDER BY visit_month) as lead2_lead_visti_month, FROM `advanced.analytics_function_01` -- 문제2. user들의 다음 접속 월과 다다음 접속 월, 이전 접속 월을 구하는 쿼리를 작성하세요. SELECT *, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) as after_visti_month, LEAD(visit_month, 2) OVER(PARTITION BY user_id ORDER BY visit_month) as after2_lead_visti_month, LAG(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) as before_visti_month, FROM `advanced.analytics_function_01`2. Frame 연습 문제SELECT *, SUM(amount) OVER() AS amount_total, SUM(amount) OVER(ORDER BY order_id) AS cumulative_sum, SUM(amount) OVER(PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user, AVG(amount) OVER(ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amount FROM advanced.orders ORDER BY order_id3. 윈도우 함수 연습 문제-- 문제1. 사용자 별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. 단,GROUP BY를 사용해서 집계하는 것이 아닌 query_logs의 데이터의 우측에 새로운 컬럼을 만들어주세요. SELECT user, team, query_date, COUNT(user) OVER(PARTITION BY user) AS total_query_cnt FROM advanced.query_logs -- 문제2. 주차 별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후,실행한 수를 활용해 랭킹을 구해주세요. 단,랭킹이 1등인 사람만 결과가 보이도록해주세요. WITH base AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, user, team, COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) SELECT *, RANK() OVER(PARTITION BY week_number, team ORDER BY query_cnt DESC) AS rnk FROM base QUALIFY rnk = 1 ORDER BY week_number, team, query_cnt DESC -- 문제3. (2번 문제에서 사용한 주 차별 쿼리 사용)쿼리를 실행한 시점 기준 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요. WITH base AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, user, team, COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) SELECT *, LAG(query_cnt) OVER(PARTITION BY user ORDER BY week_number) AS lag1_query_cnt FROM base ORDER BY user, week_number -- 문제4. 시간의 흐름에 따라, 일자 별로 유저가 실행한 누적 쿼리 수를 작성해주세요. WITH base AS ( SELECT query_date, team, user, COUNT(query_date) AS query_cnt, FROM advanced.query_logs GROUP BY ALL ) SELECT *, SUM(query_cnt) OVER(PARTITION BY user ORDER BY query_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_query_cnt, SUM(query_cnt) OVER(PARTITION BY user ORDER BY query_date) AS cumulative_query_cnt2 FROM base ORDER BY user, query_date -- 문제5. 시간의 흐름에 따라, 일자 별로 유저가 실행한 누적 쿼리 수를 작성해주세요. WITH raw_data AS( SELECT DATE'2024-05-01'AS date, 15 AS number_of_orders UNION ALL SELECT DATE'2024-05-02',13 UNION ALL SELECT DATE'2024-05-03',NULL UNION ALL SELECT DATE'2024-05-04',16 UNION ALL SELECT DATE'2024-05-05',NULL UNION ALL SELECT DATE'2024-05-06',18 UNION ALL SELECT DATE'2024-05-07',20 UNION ALL SELECT DATE'2024-05-08',NULL UNION ALL SELECT DATE'2024-05-09',13 UNION ALL SELECT DATE'2024-05-10',14 UNION ALL SELECT DATE'2024-05-11',NULL UNION ALL SELECT DATE'2024-05-12',NULL ) SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS last_value_orders -- 범위 디폴트 값이 현재 행부터 이전 모든 행까지의 기준이기 때문에 null 값인 경우 직전에 있는 행 값을 가져옴 FROM raw_data -- 문제6. 5번 문제에서 NULL을 채운 후,2일 전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요 (이동평균) SELECT date, last_value_orders, AVG(last_value_orders) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg FROM ( SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS last_value_orders -- 범위 디폴트 값이 현재 행부터 이전 모든 행까지의 기준이기 때문에 null 값인 경우 직전에 있는 행 값을 가져옴 FROM raw_data ) -- 문제7. app_logs 테이블에서 CustomSession을 만들어주세요. 이전 이벤트 로그와 20초가 지나면 새로운 Session을 만들어주세요. Session은 숫자로 (1,2,3…)표시해도 됩니다. WITH base AS ( SELECT event_date, event_timestamp, DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime, event_name, user_id, user_pseudo_id, LAG(DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul")) OVER(PARTITION BY user_pseudo_id ORDER BY DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul")) AS before_event_datetime, FROM `advanced.app_logs` WHERE 1=1 AND event_date = "2022-08-18" AND user_pseudo_id = "1997494153.8491999091" ), session AS ( SELECT *, CASE WHEN second_diff IS NULL THEN 1 WHEN second_diff > 20 THEN 1 -- ELSE NULL END AS session_start FROM ( SELECT *, DATETIME_DIFF(event_datetime, before_event_datetime, SECOND) AS second_diff FROM base ) ) SELECT *, SUM(session_start) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS session_id FROM session
-
미해결토비의 스프링 6 - 이해와 원리
NoSQL의 PlatformTransactionManager adapter 는 없는건가요?
안녕하세요. 우선 토비님의 강의 너무 잘 듣고 있습니다. 강의 제작해주셔서 무한 감사드려요.Transaction manager 추상화 부분 강의를 들으면서 NoSQL의 트랜잭션을 지원하는 어댑터는 없는건가 궁금해서 질문드립니다.감사합니다.
-
해결됨실리콘밸리 엔지니어와 함께하는 Elasticsearch
update 질문드립니다.
강의에서는 POST /my_index/_update/100이와같이 update를 진행하였는데, POST /my_index/_doc/1/_update이와같이 update를 수행하여도 동일하게 동작을 하는데 둘다 유효한 문법인 것 같은데 어느경우에 첫번째를 사용하고 어느경웨 두번째 문법을 사용하는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
BlockingQueue의 offer, poll 질문 드립니다.
안녕하세요! 너무 알찬강의 잘 듣고 있습니다! 강의에서 BlockingQueue의 offer와 poll은 일정시간만큼 대기하신다고 하셨는데요,이때 이들이 기다리는 영역은 어디가 되는건가요..?ReentrantLock을 획득하기 위한 대기wait()을 위한 대기 아니면 그 어느것도 상관없이 항상 대기 Queue가 된 후 2초인걸까요?! 그리고 만약 어떤 상황이든 2초만을 기다리고 종료시키는 방법이라면, Lock을 획득하고, 생산자나 소비자가 무언가 데이터를 처리하는 과정에서 2초가 지났을 때 이 작업을 강제 종료해 버리면 동일하게 동시성 문제가 발생할 수 있지 않을까요?(실제 처리하지 않았지만 실패로 결과가 나타난다던가..)
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
싱글턴 적용된 클래스가 현재 씬을 재로드하면 이상해요
싱글턴이 적용된 클래스는 사라지지 않고또 한 개만 존재해야 할 텐데가끔식 씬을 재로드시 한 개가 더 생깁니다
-
미해결BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 2주차 과제] 윈도우 함수(연습문제) - 탐색함수 / Frame / 총정리
탐색함수 연습문제문제 1. user들의 다음 접속 월과 다다음 접속 월을 구하는 쿼리를 작성해주세요.SELECT *, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS next_visit_month, LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS nnext_visit_month FROM advanced.analytics_function_01 LEAD가 다음!!!! 은근 헷갈린다 정말. L, E, A, D. D로 끝나니까 다음이라고 생각해야겠다.문제2. user들의 다음 접속 월과 다다음 접속 월, 이전 접속 월을 구하는 쿼리를 작성해주세요.SELECT *, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS next_visit_month, LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS nnext_visit_month, LAG(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS previous_visit_month FROM advanced.analytics_function_01 LAG함수를 쓴 컬럼에서 NULL이 나온다? → 아 이 row가 처음이다.LEAD 함수를 쓴 컬럼에서 NULL이 나온다? → 아 이 row가 마지막이다.문제3. 유저가 접속했을 때, 다음 접속까지의 간격을 구하시오.#답 x, after_visit_month에서 에러남 SELECT *, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month, after_visit_month - visit_month FROM advanced.analytics_function_01 →SELECT 절은 가장 마지막에 실행되기 때문에 LEAD함수를 실행하면서 after_visit_month라 이름 붙인 것이다. 따라서 아직 SELECT 절에서 after_visit_month라는 것을 인식하지 못한다.#물론 쿼리가 짧을 때에는 이것도 가능. #하지만 이러한 쿼리가 굉장히 많아지면 복잡해지고, 실수하기 좋다. #중복된 쿼리는 줄이는 것이 좋다. SELECT *, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) - visit_month AS diff_visit_month, FROM advanced.analytics_function_01 → 윈도우 함수를 이렇게 쓰는 것이 좋을까? 중복된 쿼리는 줄이는 것이 좋다.→ 서브쿼리 사용하는 것이 더 낫다. 서브쿼리나 WITH문과 같은 CTE에서는 윈도우함수를 여러 개 쓰더라도 같은 정렬기준과 파티션 기준을 갖는다면 한 번의 데이터 스캔을 거친다.→ 쿼리문 수정시에도 좋다. 만약 쿼리를 수정해야할 때 서브쿼리 내의 쿼리문만 수정하면 되기 때문이다.SELECT *, after_visit_month - visit_month AS diff FROM ( SELECT *, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month, FROM advanced.analytics_function_01 ) 문제 4. 이 데이터셋을 기준으로 user_id의 첫번째 접근 월을 구하는 쿼리를 작성해주세요.SELECT *, FIRST_VALUE(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS first_month LAST_VALUE(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS last_month FROM advanced.analytics_function_01 Frame 연습문제문제 1. 우리 회사의 모든 주문량은?SELECT *, SUM(amount) OVER (ORDER BY order_date, order_id #OVER 안에 아무것도 안 들어가도 됨 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS amount_total FROM advanced.orders 문제 2. 특정 주문 시점에서 누적 주문량은?SELECT *, SUM(amount) OVER (ORDER BY order_date, order_id) AS cumulative_sum FROM advanced.orders 문제 3. 고객별 주문 시점에서 누적 주문량은?SELECT *, SUM(amount) OVER (PARTITION BY user_id ORDER BY order_date, order_id ) AS cumulative_sum_by_user 문제 4. 최근 직전 5개의 평균 주문량은?SELECT *, AVG(amount) OVER (ORDER BY order_date, order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amout 총정리 연습문제문제 1. 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. 단, GROUP BY를 사용해서 집계하는 것이 아닌 query_logs의 데이터의 우측에 새로운 컬럼을 만들어주세요SELECT *, COUNT(query_date) OVER (PARTITION BY user ORDER BY user) AS total_query_cnt FROM advanced.query_logs 문제 2. 주차별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후, 실행한 수를 활용해 랭킹을 구해주세요. 단, 랭킹이 1등인 사람만 결과가 보이도록 해주세요.WITH table AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, team, user, COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) SELECT *, RANK() OVER(PARTITION BY week_number ORDER BY query_cnt) AS team_rank FROM table QUALIFY team_rank = 1문제 3. (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요.WITH table AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, team, user, COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) SELECT *, LAG(query_cnt) OVER (PARTITION BY user ORDER BY week_number) AS prev_week_query_cnt FROM table LAG(어떤 이전 값이 들어가야 하는지 = 1주 전 쿼리실행수)PARTITION BY로 쓸 기준은 user : 왜냐면 user 단위로 1주 전 쿼리실행수를 가져오기 때문ORDER BY로 쓸 기준은 week_number : 1주 전 쿼리이기 때문에 날짜 관련으로 정렬문제 4. 시간의 흐름에 따라 일자별로 유저가 실행한 누적 쿼리 수를 작성해주세요.WITH query_count_table AS ( SELECT *, COUNT(*) AS query_count FROM advanced.query_logs GROUP BY ALL ) SELECT *, SUM(query_count) OVER (PARTITION BY user ORDER BY query_date) AS cululative_query_count FROM query_count_table 처음에는 PARTITION BY에 query_date도 같이 넣었다가 결과가 날짜를 기준으로 구분되고 있는 것이 보여서 아차 하고 query_date를 뺐더니 정답이 되었다…..자꾸 문제에서 말하는 “일자 별로” 와 같은 말 때문에 PARTITION BY에 어떤 컬럼이 와야 하는지 헷갈리는 것 같다.문제 5. 다음 데이터는 주문 횟수를 나타낸 데이터입니다. 만약 주문 횟수가 없으면 NULL로 기록됩니다 이런 데이터에서 NULL값이라고 되어 있는 부분을 바로 이전 날짜의 값으로 채워주는 쿼리를 작성해주세요.WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07' , 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL UNION ALL ) SELECT *, LAST_VALUE(number_of_order IGNORE NULLS) OVER (ORDER BY date) AS last_value_orders FROM raw_dataLAST_VALUE()는 원래 NULL을 포함해서 연산하기 때문에 위에서 그냥 쓰면 NULL이 마지막 값으로 인정돼서 들어오지만, IGNORE NULLS를 사용하면 NULL값은 제외하고 값이 있는 것만 마지막값으로 생각하고 가져오기 때문에 쓰는 것. 문제 6. 5번 문제에서 NULL을 채운 후, 2일전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요(이동평균)WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07' , 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ), filled_data AS ( SELECT * EXCEPT(number_of_orders), **LAST_VALUE**(number_of_orders **IGNORE NULLS**) OVER (ORDER BY date) AS number_of_orders FROM raw_data ) SELECT *, AVG(number_of_orders) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg FROM filled_data 문제 7. app_logs 테이블에서 custom session을 만들어주세요. 이전 이벤트 로그와 20초가 지나면 새로운 session을 만들어주세요. session은 숫자로 (1, 2, 3 …) 표시해도 됩니다.2022-08-18일의 user_pseudo_id(1997494153.8491999091)은 session_id가 4까지 나옵니다.WITH base AS( SELECT event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE event_date = '2022-08-18' AND user_pseudo_id = "1997494153.8491999091" ), diff_data AS( SELECT *, #이전 이벤트 시간과 현재 이벤트시간의 간격을 SECOND 초단위로 구하기 / second_diff를 기반으로 새로운 세션의 시작일지 아닐지 판단 DATETIME_DIFF(event_datetime, prev_event_datetime, SECOND) AS second_diff FROM ( SELECT *, # 직전 이벤트 시간을 prev_event_datetime으로 만들기 LAG(event_datetime, 1) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS prev_event_datetime FROM base ) ) SELECT *, SUM(session_start) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS session_num FROM( SELECT *, CASE WHEN prev_event_datetime IS NULL THEN 1 WHEN second_diff >= 20 THEN 1 ELSE NULL END AS session_start FROM diff_data ) ORDER BY event_datetime
-
미해결
[인프런 빅쿼리 빠짝스터디 2주차] 윈도우 함수 연습 문제
연습문제(1) 탐색 함수-- 문제 1) user들의 다음 접속 월과 다다음 접속 월을 구하는 쿼리를 작성해주세요. # 쿼리를 작성하는 목표, 확인할 지표 : 다음 접속 월과 다다음 접속 월 구하기 # 쿼리 계산 방법 : LEAD # 데이터의 기간 : # 사용할 테이블 : analytics_function_01 # Join KEY : # 데이터 특징 : SELECT user_id, visit_month, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS after_visit_month, LEAD(visit_month,2) OVER(PARTITION BY user_id ORDER BY visit_month) AS after_two_visit_month FROM advanced.analytics_function_01; -- 문제 2) user들의 다음 접속 월과 다다음 접속 월, 이전 접속 월을 구하는 쿼리를 작성해주세요. # 쿼리를 작성하는 목표, 확인할 지표 : 다음 접속 월과 다다음 접속 월, 이전 접속 월 구하기 # 쿼리 계산 방법 : LEAD, LAG # 데이터의 기간 : # 사용할 테이블 : analytics_function_01 # Join KEY : # 데이터 특징 : SELECT user_id, visit_month, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS after_visit_month, LEAD(visit_month,2) OVER(PARTITION BY user_id ORDER BY visit_month) AS after_two_visit_month, LAG(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS before_visit_month FROM advanced.analytics_function_01; -- 문제 3) user들의 다음 접속까지의 간격을 구하시오 # 쿼리를 작성하는 목표, 확인할 지표 : 다음 접속까지 간격 구하기 # 쿼리 계산 방법 : LEAD # 데이터의 기간 : # 사용할 테이블 : analytics_function_01 # Join KEY : # 데이터 특징 : WITH diff AS(SELECT user_id, visit_month, LEAD(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) AS after_visit_month, FROM advanced.analytics_function_01) SELECT *, after_visit_month - visit_month AS diff_month FROM diff; -- 추가 문제) user들의 첫번째 방문 월, 마지막 방문 월을 구하시오 # 쿼리를 작성하는 목표, 확인할 지표 : 첫번째 방문 월, 마지막 방문 월 # 쿼리 계산 방법 : FIRST_VALUE, LAST_VALUE # 데이터의 기간 : # 사용할 테이블 : analytics_function_01 # Join KEY : # 데이터 특징 : SELECT user_id, visit_month, FIRST_VALUE(visit_month) OVER(ORDER BY user_id) AS first_visit_month, LAST_VALUE(visit_month) OVER(ORDER BY user_id) AS last_visit_month FROM advanced.analytics_function_01;(2) Frame-- amount_total : 전체 SUM -- cumulative_sum : row 시점에 누적 SUM -- cumulative_sum_by_user : row 시점에 유저별 누적 SUM -- last_5_orders_avg_amount : order_id 기준으로 정렬하고, 직전 5개의 주문의 평균 amount -- 집계분석함수() OVER(PARTITION BY ~~~ ORDER BY ROWS BETWEEN A AND B) SELECT *, SUM(amount) OVER() AS amount_total, SUM(amount) OVER(ORDER BY order_id) AS cumulative_sum, SUM(amount) OVER(PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user, AVG(amount) OVER(ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amoubt FROM advanced.orders (3) 윈도우 함수 연습문제-- 1) 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. 단, GROUP BY를 사용해서 집계하는 것이 아닌 query_logs의 데이터의 우측에 새로운 컬럼을 만들어주세요. # 쿼리를 작성하는 목표, 확인할 지표 : 쿼리를 실행한 총 횟수 # 쿼리 계산 방법 : SUM # 데이터의 기간 : # 사용할 테이블 : query_logs # Join KEY : # 데이터 특징 : SELECT *, COUNT(query_date) OVER(PARTITION BY user) AS total_query_cnt FROM advanced.query_logs ORDER BY user, query_date; -- 2) 주차별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후, 실행한 수를 활용해 랭킹을 구해주세요. 단, 랭킹이 1등인 사람만 결과가 보이도록 해주세요 # 쿼리를 작성하는 목표, 확인할 지표 : 주차별로 팀내에서 쿼리를 많이 실행한 수와 랭킹 그 랭킹이 1등인 사람만 결과 # 쿼리 계산 방법 : EXTRACT, COUNT, RANK # 데이터의 기간 : # 사용할 테이블 : query_logs # Join KEY : # 데이터 특징 : WITH query_cnt_by_team AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, team, user, COUNT(user) AS query_count FROM advanced.query_logs GROUP BY ALL) SELECT *, RANK() OVER(PARTITION BY week_number, team ORDER BY query_count DESC) AS team_rank FROM query_cnt_by_team QUALIFY team_rank = 1 ORDER BY week_number, team; -- 3) (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요 # 쿼리를 작성하는 목표, 확인할 지표 : 1주 전에 쿼리 실행 수 # 쿼리 계산 방법 : EXTRACT, COUNT, LAG # 데이터의 기간 : # 사용할 테이블 : query_logs # Join KEY : # 데이터 특징 : WITH query_cnt_by_team AS ( SELECT EXTRACT(WEEK FROM query_date) AS week_number, team, user, COUNT(user) AS query_count FROM advanced.query_logs GROUP BY ALL) SELECT *, LAG(query_count) OVER(PARTITION BY user ORDER BY week_number) AS prev_week_query_count FROM query_cnt_by_team ORDER BY user; -- 4) 시간의 흐름에 따라, 일자별로 유저가 실행한 누적 쿼리 수를 작성해주세요 # 쿼리를 작성하는 목표, 확인할 지표 : 일자별로 유저가 실행한 누적 쿼리 수 # 쿼리 계산 방법 : COUNT, SUM # 데이터의 기간 : # 사용할 테이블 : query_logs # Join KEY : # 데이터 특징 : WITH query_cnt AS( SELECT *, COUNT(user) AS query_count FROM advanced.query_logs GROUP BY ALL) SELECT *, SUM(query_count) OVER(PARTITION BY user ORDER BY query_date) AS cumulative_query_count FROM query_cnt ORDER BY user, query_date; -- 5) 다음 데이터는 주문 횟수를 나타낸 데이터입니다. 만약 주문 횟수가 없으면 NULL로 기록됩니다. 이런 데이터에서 NULL 값이라고 되어있는 부분을 바로 이전 날짜의 값으로 채워주는 쿼리를 작성해주세요 # 쿼리를 작성하는 목표, 확인할 지표 : NULL 데이터를 이전 날짜의 값으로 채워 # 쿼리 계산 방법 : LAST_VALUE IGNORE NULLS, EXCEPT # 데이터의 기간 : # 사용할 테이블 : raw_data # Join KEY : # 데이터 특징 : 중간 중간 값에 null 존재 WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ) SELECT * EXCEPT(number_of_orders), LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS number_of_orders, FROM raw_data; -- 6) 5번 문제에서 NULL을 채운 후, 2일 전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요(이동 평균) # 쿼리를 작성하는 목표, 확인할 지표 : # 쿼리 계산 방법 : LAST_VALUE IGNORE NULL, EXCEPT, AVG, ROW BETWEEN, PRECEDING, CURRENT ROW # 데이터의 기간 : # 사용할 테이블 : raw_data # Join KEY : # 데이터 특징 : 중간 중간 값에 null 존재 WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ), filled_raw_data AS( SELECT * EXCEPT(number_of_orders), LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS number_of_orders, FROM raw_data) SELECT *, AVG(number_of_orders) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg FROM filled_raw_data; -- 7) app_logs 테이블에서 Custom Session을 만들어 주세요. 이전 이벤트 로그와 20초가 지나면 새로운 Session을 만들어 주세요. Session은 숫자로 (1, 2, 3 ...) 표시해도 됩니다 -- 2022-08-18일의 user_pseudo_id(1997494153.8491999091)은 session_id가 4까지 나옵니다 # 쿼리를 작성하는 목표, 확인할 지표 : # 쿼리 계산 방법 : # 데이터의 기간 : 2022-08-18 # 사용할 테이블 : app_logs # Join KEY : # 데이터 특징 : WITH session_app_logs AS( SELECT event_date, event_timestamp, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE event_date = "2022-08-18" AND user_pseudo_id = "1997494153.8491999091") ,before_datetime_app_logs AS( SELECT *, LAG(event_datetime) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS before_event_datetime FROM session_app_logs) ,diff_app_logs AS( SELECT *, DATETIME_DIFF(event_datetime, before_event_datetime, SECOND) AS second_diff FROM before_datetime_app_logs) ,session_start_app_logs AS( SELECT *, CASE WHEN second_diff >= 20 OR second_diff IS NULL THEN 1 ELSE 0 END AS session_start FROM diff_app_logs) SELECT *, SUM(session_start) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS session_id FROM session_start_app_logs ORDER BY user_pseudo_id, event_datetime;배운점사실 윈도우 함수를 찾아보고 쓰면서 이게 윈도우 함수인지도 모르고 사용했었는데 정말 중요하고 유용한 함수라는걸 다시 한번 느낄 수 있었다Frame 부분이 제일 헷갈리고 계속 사용해봐야 이해할 수 있을거 같다.
-
미해결
플러터 ios 빌드 후 실행 flutter_secure_storage 에러
안녕하세요. 플러터 개발한 걸 ios에서 테스트해보고 싶어서 xcode로 빌드했습니다.안드로이드에서는 문제 없이 실행됐는데 xcode에서 build succeeded 메세지를 보고 실행하면앱은 splash 화면에서 넘어가지 않고 SwiftFlutterSecureStoragePlugin.swift의 아래 부분에서let channel = FlutterMethodChannel(name: "plugins.it_nomads.com/flutter_secure_storage", binaryMessenger: registrar.messenger()) Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)이런 에러가 나오고 있습니다. 버전의 문제인가 해서 다양한 버전 시도도 해봤습니다.flutter_secure_storage: ^6.0.0. ^9.2.2ios는 13.0pod install, clean build도 해봤습니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Executor 스레드 풀 관리 - 분석 에서 BlockingQueue
1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]쓰레드 풀 core사이즈와 max사이즈가 어떻게 관리 되는지는 어느정도 이해한 것 같은데, 이 예제에서 BlockingQueue안에서 쓰레드들이 스레드 대기 집합, 락 대기 집합에 어떻게 관리되는 것 까지 이해해보려고 하니 매우 어렵네요..ai야 도와줘~!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
7강중에서
혹시 뭐가 문제 일까요..?const express = require('express'); // 내가 설치한 express 모듈을 가져온다. const app = express() // 새로운 express 앱을 만든다. const port = 5000 // 포트 const bodyParser = require('body-parser'); const {User} = require("./models/User"); // User 가져옴 //application/x-www-form-urlencoded app.use(bodyParser.urlencoded({extended:true})) // 바디 파서가 클라이언트에서 오는정보를 서버에서 분석해서 가져올수있게 하는것 //application/josn app.use(bodyParser.json()); // 애는 json타입을 분석해서 가져옴 const mongoose = require('mongoose'); mongoose.connect('mongodb+srv://jin:0000@jin.p3agn.mongodb.net/?retryWrites=true&w=majority&appName=jin',{ useNewUrlParser: true, useUnifiedTopology: true }).then(()=> console.log('MongoDB Connected...')) .catch(err => console.log(err)) app.get('/', (req, res) => { // 앱을 넣은 후에 루트디렉토리에 오면 헬로월드 실행? res.send('Hello World!') }) app.post('/register',(req,res) => { //회원 가입 할때 필요한 정보들을 클라이언트에서 가져오면 // 그것들을 데이터 베이스에 넣어준다. const user = new User(req.body) // user 정보들을 데이터베이스에 넣기위해 req.body로 작성하면됨 // req.body 에는 정보들 있음 user.save((err,userInfo)=>{ // 만약 저장을 할때 err가 있을때 클라이언트한테 json형식으로 알려줌 if(err) return res.json({success:false, err}) // err 메세지 전달 return res.status(200).json({ // status200은 성공했다는 의미 success:true }) }) // save는 몽고디비에서 오는 메서드 // req.body 정보들이 user모델에 저장이됨 }) app.post('/register', async (req, res) => { try { const user = new User(req.body); // user 정보들을 데이터베이스에 넣기위해 req.body로 작성하면됨 // req.body 에는 정보들 있음 const userInfo = await user.save(); // 만약 저장을 할때 err가 있을때 클라이언트한테 json형식으로 알려줌 res.status(200).json({ success: true, userInfo }); } catch (err) { // err 메세지 전달 res.json({ success: false, err }); } }); app.listen(port, () => { console.log(`Example app listening on port ${port}`) //앱을 포트 5000번에서 실행 })
-
미해결파이썬 기초 라이브러리부터 쌓아가는 머신러닝
데이터 수정
좋은 강의 감사합니다.말씀하신대로 특정 조건에 따른 데이터를 찾는거 말고 수정할 때는 반복문으로 만 제어가 가능할까요?temp[temp['job'].apply(lambda x : x in ['student','manager'])] = 'whitehand'이런식으로 하면 해당 row의 값 전체가 바뀌던데 job만 바꾸고 싶습니다.
-
미해결유니티 2D 로그라이크 게임 만들기 [한글자막]
플레이에는 문제가 없는데 빌드에서 문제가 계속해서 발생하네요.
Android 플랫폼에서 빌드하려고 하는데 아무리 해도 해결이 안되는 오류가 발생하네요. Building Library/Bee/artifacts/Android/d8kzr/libil2cpp.so failed with output:ld.lld: error: undefined symbol: JS_FileSystem_Sync>>> referenced by Assembly-CSharp.cpp:14373 (Library/Bee/artifacts/Android/il2cppOutput/cpp/Assembly-CSharp.cpp:14373)>>> Library/Bee/artifacts/Android/d8kzr/gqh0me0k2d9s.o:(GameManager_JS_FileSystem_Sync_m246A574BB47ADA18D3D17EE297B47F03B281F5C3)>>> referenced by Assembly-CSharp.cpp:16220 (Library/Bee/artifacts/Android/il2cppOutput/cpp/Assembly-CSharp.cpp:16220)>>> Library/Bee/artifacts/Android/d8kzr/gqh0me0k2d9s.o:(MainMenu_JS_FileSystem_Sync_m6882592881D0992397C77FED445CBB536B836232)clang++: [0;1;31merror: [0m[1mlinker command failed with exit code 1 (use -v to see invocation)[0mUnityEditor.BuildPlayerWindow:BuildPlayerAndRun () (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPlayerWindow.cs:200)Chatgpt 한테 물어보고 제시한 해결책 전부 다 해봤는데도 안됩니다. 부탁드립니다- 빈 프로젝트에 파일 추가하면서 해봤는데 그 곳에서는 빌드가 잘됌- WebGL 관련 함수 사용 안함- Library 지우고 다시 해봤음- Android SDK & NDK Tools 있음
-
해결됨김영한의 실전 자바 - 중급 1편
LocalDateTime.now() 관련해서 질문있습니다
LocalDateTime.now()로 현재 시간을 출력하면 소수점 아래 단위는 9자리(ns)까지 출력이 됐습니다. 근데 Windows에서 시스템 시계(?) 클럭(?)의 정밀도는 ms까지 보장한다고 알고 있는데 LocalDateTime.now()의 정밀도는 ns(소수점 아래 9자리)까지 보장하나요 ms(소수점 아래 3자리)까지 보장하나요??
-
미해결
encase 설치관련 문의 드립니다.
회사에 이야기해서 공부하기위해 encase 설치 cd, 동글이 빌려와서 집에서 공부한다고 하였는데 CD롬이 없어서 usb CD롬 까지 사서 CD넣고 했는데CD가 오래되었는지.. 실행도 안되네요.. 혹시 따로 encase 설치파일을 구할방법이 없을까요.?회사에 있는 동글이는 8.08 버전이라서 찾아보려고했는데 방법이 없네요.. 설치파일 관련 구글링해도 도저히 나오지 않아서 부득이하게 여기에 글을 올립니다..
-
미해결BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[인프런 빅쿼리 빠짝스터디 2주차] 윈도우 함수, FRAME 설정, QUALIFY
<윈도우 함수>연습문제 1SELECT user_id, visit_month, LEAD(visit_month, 1) OVER(PARTITION BY user_id ORDER BY visit_month) as next_visit_month, LEAD(visit_month, 2) OVER(PARTITION BY user_id ORDER BY visit_month) as two_next_visit_month, FROM advanced.analytics_function_01 ORDER BY user_id연습문제 2SELECT user_id, visit_month, LAG(visit_month, 1) OVER(PARTITION BY user_id ORDER BY visit_month) as prev_visit_month, LEAD(visit_month, 1) OVER(PARTITION BY user_id ORDER BY visit_month) as next_visit_month, LEAD(visit_month, 2) OVER(PARTITION BY user_id ORDER BY visit_month) as two_next_visit_month, FROM advanced.analytics_function_01 ORDER BY user_id추가문제 - 유저의 첫번째 방문월과 마지막 방문월 구하기SELECT user_id, visit_month, FIRST_VALUE(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) as first_visit_month, LAST_VALUE(visit_month) OVER(PARTITION BY user_id ORDER BY visit_month) as last_visit_month, FROM advanced.analytics_function_01 ORDER BY user_id<FRAME 설정>advanced.order 문제SELECT *, SUM(amount) OVER() as amount_total, SUM(amount) OVER(ORDER BY order_id) as cumulative_sum, SUM(amount) OVER(PARTITION BY user_id ORDER BY order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cumulative_sum_by_user, AVG(amount) OVER(ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) as last_5_orders_avg_amount, FROM advanced.orders ORDER BY order_id, user_id<연습문제>연습문제 1SELECT *, COUNT(*) OVER(PARTITION BY user) as total_query_cnt FROM advanced.query_logs ORDER BY user연습문제 2WITH base as ( SELECT EXTRACT(WEEK FROM query_date) as week_number, team, user, COUNT(user) as query_cnt FROM advanced.query_logs GROUP BY ALL ) SELECT *, RANK() OVER(PARTITION BY week_number, team ORDER BY query_cnt DESC) as team_rank FROM base QUALIFY team_rank=1 ORDER BY week_number연습문제 3WITH base as ( SELECT user, team, EXTRACT(WEEK FROM query_date) as week_number, COUNT(user) as query_cnt, FROM advanced.query_logs GROUP BY ALL ) SELECT *, LAG(query_cnt, 1) OVER(PARTITION BY user ORDER BY week_number) as prev_week_query_count FROM base연습문제 4WITH base as ( SELECT user, team, query_date, COUNT(user) as query_count, FROM advanced.query_logs GROUP BY ALL ) SELECT *, SUM(query_count) OVER(PARTITION BY user ORDER BY query_date) as cumulative_query_count FROM base ORDER BY user연습문제 5-- SELECT -- *, -- IF(number_of_orders is NULL, prev_number_of_orders, number_of_orders) as result_number_of_orders, -- FROM ( -- SELECT -- *, -- LAG(number_of_orders, 1) OVER(ORDER BY date) as prev_number_of_orders -- FROM raw_data -- ) -- 이 방법은 전의 값들이 Null이 여러개면 제대로 안나옴...! SELECT *, IF(number_of_orders is NULL, last_number_of_orders, number_of_orders) as result_number_of_orders, FROM ( SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) as last_number_of_orders FROM raw_data )연습문제 6SELECT *, AVG(result_number_of_orders) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING and CURRENT ROW) as moving_avg FROM ( SELECT *, IF(number_of_orders is NULL, last_number_of_orders, number_of_orders) as result_number_of_orders, FROM ( SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) as last_number_of_orders FROM raw_data ) )연습문제 7WITH base as ( SELECT event_date, event_timestamp, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') as event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE event_date = '2022-08-18' and user_pseudo_id = '1997494153.8491999091' ), base2 as ( SELECT *, LAG(event_datetime, 1) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) as before_event_datetime FROM base ) SELECT *, SUM(session_start) OVER(PARTITION BY user_pseudo_id ORDER BY event_timestamp) as session_id FROM ( SELECT *, IF(second_diff is NULL or second_diff > 20, 1, NULL) as session_start FROM ( SELECT *, DATETIME_DIFF(event_datetime, before_event_datetime, second) as second_diff FROM base2 ) ) ORDER BY event_timestamp배운점&느낀점EXTRACT(WEEK FROM query_date) as week_number : date 정보에서 week 정보 등을 추출할 수 있는 함수DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') as event_datetime : timestamp 형태의 데이터를 날짜로 바꿀 수 있는 함수LAST_VALUE(number_of_orders IGNORE NULLS)... 그냥 마지막 값은 LAST_VALUE, 이전 데이터 중 null값이 아닌 마지막 값을 가져오고 싶을 때는 IGNORE NULLS를 사용해야 함. (5번 연습문제에서 처음에는 LAG 함수를 사용해서 null이 여러 개 연속인 경우가 있어 제대로 값을 가져오지 못했고, LAST_VALUE 윈도우 함수에서IGNORE NULLS 를 까먹어서 null 처리가 또 안됐었다.)With절과 서브쿼리 절을 어떤 상황에 사용할지 아직 잘 모르겠다.CASE WHEN절 사용법이 익숙치 않았다. (문제를 풀 때 IF절을 사용했던 부분에서 강의에서는 CASE WHEN을 사용)윈도우 함수를 제대로 처음 배워봤는데, 어려웠지만 유용한 부분이 많아 사용할 일이 많을 것 같다.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍
[오류 검토 요청]
변수와 주석문 - 3. 주석문04:57 Ctrl + /
-
미해결RAG 마스터: 기초부터 고급기법까지 (feat. LangChain)
pdf파일 압축이 안풀립니다.
수업자료 pdf.zip파일 압축이 안풀리네요. zip파일이 올바르지 않습니다라는 문구가 뜹니다. 파일 확인해 주시기 바랍니다.
-
해결됨독하게 시작하는 C 프로그래밍
vs코드 인터프리터
vs코드를 깔고 인터프리터를 따로 깔아야하는걸로 알고있는데 그냥 아무 인터프리터나 깔아도 상관이 없나요 ??
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
입문 강의 인데 진행이 너무 막힙니다.
Exercise 3. 출력print 함수를 사용하여 3.1415의 값을 출력하세요.단, 소수점 아래는 첫 번째 자리까지만 표시되도록 하세요.Example3.1 아니 이건 배우지도 않았는데어떻게 알아내나요 ? 검색해서 구글링해서 찾아야 하나요 ?시간 아끼면서 지루하지 않게 같이 배우면서 하려고 한건데Exercise 1. 출력화면에 "Hello World!"를 출력하세요.[1]:print ("Hello World!")Hello World! [2]:print ("Hello World!")Hello World! Exercise 2. 출력화면에 "I don't like C language"를 출력하세요. 이건 그냥 타이핑 치면 되지만 구글링 해가면서까지 시간 허비하는 건 아닌 거 같아요 바로 알려주면서 넘어가도 될 거 같은데요 휴
-
미해결무작정 따라하며 원리를 깨우치는 웹 해킹 : WebGoat 편
webgoat 실행 오류
포트를 바꾸어가며 실행해보았는데, 실행이 되지 않고ERROR org.owasp.webgoat.StartWebGoat - Port 127.0.0.1:8080 is already in use라는 오류가 계속 뜹니다.netstat -ano | findstr를 사용하여 검색을 해봤는데, 결과는 아무것도 뜨지 않아 질문 드립니다.