묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    미해결FastAPI 완벽 가이드CORS 질문CORS 설명 주신 부분을 보면 처음 브라우저에서 request 날릴 때에는 Origin에 아무런 값이 들어가 있지 않아서 response를 받고 그 이후에 받은 html의 javascript 쪽에서 다른 요청을 보냈을 때 기존에 요청하면서 받았던 Origin 값이 같이 들어가면서 이슈가 발생한다고 말씀주셨는데, blog json data 테스트 하는 거 보면 origin이 null인데 바로 cors 에러가 나나요 ? 
- 
      
        
    해결됨FastAPI 완벽 가이드url 차이 질문@app.get("/items") # 함수에 개별 인자값이 들어가 있는 경우 path parameter가 아닌 모든 인자는 query parameter # query parameter의 타입과 default값을 함수인자로 설정할 수 있음. async def read_item(skip: int = 0, limit: int = 2): return fake_items_db[skip : skip + limit] @app.get("/items_nd/") # 함수 인자값에 default 값이 주어지지 않으면 반드시 query parameter에 해당 인자가 주어져야 함. async def read_item_nd(skip: int, limit: int): return fake_items_db[skip : skip + limit]안녕하세요 url 차이에 관해 질문드립니다. 위에 url은 "/items" 인데, 아래 url은 "/items_nd/" 으로 끝에 /가 붙어있는데요. 둘다 query params로 구성되어 있는데 위는 /로 안끝나고, 아래는 왜 /로 끝났는지 이유가 궁금합니다. 
- 
      
        
    해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)[인프런 빅쿼리 빠짝스터디 1주차] 퍼널 작성 흐름을 익히는게 어려웠다목차과제별 작성 쿼리쿼리 작성 후 느낀점 과제별 작성 쿼리(1) ARRAY·STRUCT## 연습문제 1번-- select-- title,-- genre-- from advanced.array_exercises-- cross join unnest(genres) as genre## 연습문제 2번-- select-- title,-- actor.actor,-- actor.character,-- from advanced.array_exercises-- cross join unnest(actors) as actor## 연습문제 3번-- select-- title,-- actor.actor,-- actor.character,-- genre-- from advanced.array_exercises-- cross join unnest (actors) as actor-- cross join unnest (genres) as genre## 연습문제 4번-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- event_param.key,-- event_param.value,-- event_param.value.int_value-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date = '2022-08-01' PIVOT## 연습문제 1번-- select-- order_date,-- sum(if(user_id=1, amount, 0)) as user_1,-- sum(if(user_id=1, amount, 0)) as user_2,-- sum(if(user_id=1, amount, 0)) as user_3,-- from advanced.orders-- group by-- order_date-- order by-- order_date asc## 연습문제 2번-- select-- user_id,-- sum(if(order_date='2023-05-01', amount, 0)) as 2023-05-01,-- sum(if(order_date='2023-05-02', amount, 0)) as 2023-05-02,-- sum(if(order_date='2023-05-03', amount, 0)) as 2023-05-03,-- sum(if(order_date='2023-05-04', amount, 0)) as 2023-05-04,-- sum(if(order_date='2023-05-05', amount, 0)) as 2023-05-05-- from advanced.orders-- group by-- user_id## 연습문제 3번-- select-- user_id,-- max(if(order_date = '2023-05-01', 1, 0)) as 2023-05-01,-- max(if(order_date = '2023-05-02', 1, 0)) as 2023-05-02,-- max(if(order_date = '2023-05-03', 1, 0)) as 2023-05-03,-- max(if(order_date = '2023-05-04', 1, 0)) as 2023-05-04,-- max(if(order_date = '2023-05-05', 1, 0)) as 2023-05-05-- from advanced.orders-- group by-- user_id## 앱 로그 데이터 배열 PIVOT-- with base as (-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- event_param.key as key,-- event_param.value.string_value as string_value,-- event_param.value.int_value as int_value-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date = '2022-08-01' and-- event_name = 'click_cart'-- )-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- max(if(key = 'firebase_screen', string_value, null)) as firebase_screen,-- max(if(key = 'food_id', int_value, null)) as food_id,-- max(if(key = 'session_id', string_value, null)) as session_id,-- from base-- group by all 퍼널## step1 : 퍼널정의, 유저 집계 방식 정하기## step2 : 데이터 확인-- select-- *,-- event_param.key,-- event_param.value.string_value,-- event_param.value.int_value,-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date between '2022-08-01' and '2022-08-18'-- limit 100## step3 : pivot 해서 concat 하기 좋은 형태로 만들기with base as (select*,max(if(event_param.key = 'firebase_screen', event_param.value.string_value, null)) as firebase_screen,max(if(event_param.key = 'food_id', event_param.value.int_value, null)) as food_id,max(if(event_param.key = 'session_id', event_param.value.string_value, null)) as session_idfrom advanced.app_logscross join unnest(event_params) as event_paramwhereevent_date between '2022-08-01' and '2022-08-18'group by all)## step4 : concat해서 퍼널 컬럼 정의하기, base2 as (select*,concat(event_name, '-', firebase_screen) as event_name_with_screenfrom base)## step5 : 퍼널별 유저수 쿼리 작성 I step_number, cnt 컬럼 생성-- select-- event_name_with_screen,-- case-- when(event_name_with_screen = 'screen_view-welcome') then 1-- when(event_name_with_screen = 'screen_view-home') then 2-- when(event_name_with_screen = 'screen_view-food_category') then 3-- when(event_name_with_screen = 'screen_view-restaurant') then 4-- when(event_name_with_screen = 'screen_view-cart') then 5-- when(event_name_with_screen = 'click_payment-cart') then 6-- else null-- end as step_number,-- count(distinct user_pseudo_id) as cnt-- from base2-- group by-- 1-- having-- step_number is not null## step6 : 일자별 퍼널 쿼리 작성selectevent_date,event_name_with_screen,casewhen(event_name_with_screen = 'screen_view-welcome') then 1when(event_name_with_screen = 'screen_view-home') then 2when(event_name_with_screen = 'screen_view-food_category') then 3when(event_name_with_screen = 'screen_view-restaurant') then 4when(event_name_with_screen = 'screen_view-cart') then 5when(event_name_with_screen = 'click_payment-cart') then 6else nullend as step_number,count(distinct user_pseudo_id) as cntfrom base2group by allhavingstep_number is not nullorder byevent_date 쿼리 작성 후 느낀점(1) ARRAY·STRUCT I 쿼리를 풀고난 이후 느낀점1. '~별'이라고 해서 무조건 GROUP BY는 아니다ARRAY 또는 STRUCT 같은 구조체 타입 컬럼을 만나기 전에는 '~별'이라는 텍스트가 있을 때 GROUP BY를 떠올렸습니다.그러나 구조체 타입 컬럼을 다루고난 이후, 생각이 달라졌습니다.비구조체 컬럼을 구조체 컬럼과 함께 출력할 때는 '~별'을 GROUP BY로 출력할 수 없다는 걸 알았습니다.2. CROSS JOIN을 2개 이상 사용할 때는CROSS JOIN을 2개 이상 입력할 때는 쉼표를 사용하지 않는다는 걸 알았습니다.다른 구간에서 요소를 2개 이상 입력할 때는 쉼표를 사용해서 요소를 분리 했었는데, CROSS JOIN은 아니였습니다.CROSS JOIN을 2개 이상 사용할 때 쉼표를 쓰면 다음과 같은 오류가 발생하는 걸 알았습니다 :--> Syntax error: Unexpected keyword CROSS at [24:1] (2) PIVOT I 쿼리를 풀고난 이후 느낀점1. 날짜 데이터와 다르게 일반 숫자데이터는 따옴표를 쓰지 않는다EX)if(user_id=1, amount, 0) --> Oif(user_id='1', amount, 0) --> X+if(user_id='2024-10-22', amount, 0) --> O2. 컬럼명에 대시(또는 한글)를 사용할 때는 따옴표가 아닌 백틱으로 컬럼명을 감싼다대시를 컬럼명으로 할 때는 백틱을 사용.as 2023-05-01 --> Oas '2023-05-01' --> X+as 빠짝스터디 --> Oas '빠짝스터디' --> X3. 일반 테이블을 피봇테이블로 만들 때 고려해 봐야 할 2가지1. 행에 2개 이상 중복이 있는지 확인한다.2. 2개 이상 중복이 있지만, 피봇테이블로 변경 했을 때 효율적인지 생각해 본다.위 2개 조건을 모두 충족하는 컬럼을 피봇테이블 만들 때 기준 컬럼으로 삼음.EX)*'앱 로그 데이터 배열 PIVOT 하기' 테이블 참고student 열중복 있음 (A, A, A, B, B, B)기준 열로 삼으면 → 각 학생의 모든 과목 점수를 한눈에 볼 수 있어서 효율적!subject 열중복 있음 (수학, 영어, 과학이 2번씩)기준 열로 삼으면 → 과목별로 학생들의 점수를 볼 수는 있지만, 한 학생의 전체 성적을 보기는 어려움score 열중복이 없음.기준 열로 삼으면 → 같은 점수끼리 모이겠지만, 효율이 떨어짐. (3) 퍼널 I 쿼리를 풀고난 이후 느낀점1. concat 할 때 따옴표 사용 주의처음 concat 할 때 다음과 같이 입력했습니다.concat(event_name, '-', 'firebase_screen')'firebase_screen'라고 작성했었는데, 이렇게 하니깐 firebase_screen 내에 있는 데이터랑 concat 된 게 아니라 'firebase_screen'라는 문자 자체랑 concat이 되어서 혼란스러웠습니다.concat 내에서는 따옴표를 쓰지 않고, 컬럼끼리 연결해야겠다는 걸 알게 됐습니다. 
- 
      
        
    미해결중고급 SQL과 실전 데이터 분석 101 문제 풀이sakila데이터베이스 다운했는데 값이 전부 null스키마 다운 그리고 db다운그리고 select * from actor limilt 10; 후 실행하면테이블은 표는 나오는데 안에 value값은 null로 나와요뭘 잘 못한 걸까요? ㅜ이틀 통안 삭제 다시 하면서 10번은 해본거 같아요 
- 
      
        
    해결됨[백문이불여일타] 데이터 분석을 위한 기초 SQLw3schools 에러w3schools.com 에서 실습을 할 때 SELECT * FROM products ORDER BY price DESC LIMIT 3 으로 실행시켰는데, Error in SQL:Syntax error in ORDER BY clause. 이런 결과가 나오는 건 왜일까요?ㅠ 
- 
      
        
    미해결실습으로 손에 잡히는 SQLD의 정석(2과목)ORCL등록되지 않았다고 나옴!ORA-12514: 데이터베이스에 접속할 수 없습니다. %s 서비스가 %s의 리스너에 등록되지 않았습니다. (CONNECTION_ID=+MvkL937Qk6z4IPwPp85vQ==) 요렇게 나옵니다..ㅠㅠ 
- 
      
        
    해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)4-3 EXECUTE IMMEDIATE 쿼리변수 선언해서 사용할때와 EXECUTE IMMEDIATE 사용할 때의 차이점은 무엇인가요?DECLARE custom_event STRING DEFAULT 'screen_view'; SELECT COUNT(*) AS output FROM advanced.app_logs WHERE event_date = '2022-08-01' AND event_name = custom_event GROUP BY ALL 
- 
      
        
    해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)4-3. while 문 쿼리예제 쿼리 결과에 대해 궁금한 점이 있어 질문 드립니다쿼리 결과 i는 11이 왜 나왔는지 궁금합니다. i 변수는 1,2,3,4,5,6,7,8,9,10,11 있는데, 쿼리 결과에서 MAX함수를 사용하지 않았는데도 11이 나온 이유는 뭔가요?쿼리 결과 sum_value는 25가 왜 나왔는지 궁금합니다.sum_value 변수는 1,3,5,7,9 (홀수) 있는데, 쿼리 결과에서 sum함수를 사용하지 않았는데도 25가 나온 이유는 뭔가요? 
- 
      
        
    해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)4-2 스케줄 쿼리스케줄 쿼리 강의를 듣다가 이해가 어려운 부분이 있어서 질문 드립니다스케줄 쿼리 작성하고 나서 특정 필터링할 때 백필 예약 하지 않고 where절에 직접 날짜 필터링해서 수정해도 될까요? 백필 예약을 하는 게 쿼리를 바꾸지 않고 날짜 필터링하는 걸로 이해했습니다!백필 예약을 할 때 쿼리에 @run_date/@run_time을 필수로 잘성해야하는 거 맞을까요?@run_date/@run_time 을 넣지 않으면 백필 예약을 해도 쿼리가 실행되지 않는 걸로 이해했습니다! 
- 
      
        
    미해결실습으로 손에 잡히는 SQLD의 정석(2과목)그룹 함수 데이터 모델sales 라는 테이블이 어디 있는지 모르겠어요..깃허브에도 찾아봤는데 안보여요 ㅠㅠㅠ 
- 
      
        
    미해결실습으로 손에 잡히는 SQLD의 정석(2과목)yml파일 윈도우 환경설정아래처럼 cd이용해서 경로이동한 후 yml확인하려고 ls해도 안된다고 뜹니다ㅠㅠ윈도우관련 환경설정도 올려주셨음 좋겠습니다ㅠㅠ 
- 
      
        
    해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQLAverage Population 질문SELECT FLOOR(AVG(Population)) FROM City이게 답인데 만약에 소숫점 두자리까지 반올림해라하면 작성을 어떻게 해야하는거에요? SELECT ROUND(AVG(Population, 2)) FROM City이게 맞나요? 다른문제에서 소숫점 두자리까지 반올림하라는데 이렇게 썼더니 틀리게 나와서요 ㅠㅠ - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 
- 
      
        
    해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQLRevising Aggregations - The Count Function 질문SELECT COUNT(*)FROM CityWHERE Population > 100000 이 답인데 왜 SELECT COUNT(CITY)FROM CityWHERE Population > 100000 카운트 안에 CITY 를 넣으면 안되는 걸까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 
- 
      
        
    미해결[리뉴얼] SQL 베이스캠프이름 변경이 안 됩니다as 활용해서 이름 변경하면 계속 오류가 생깁니다 
- 
      
        
    미해결SQL 시작도 못한 분들 드루와요where 절에 자꾸 오류가 생기는 이유가 궁금합니다
- 
      
        
    미해결FastAPI 완벽 가이드Type Hint에 대한 설명 요청동영상 음성이 너무 작습니다. 매번 따로 조절해줘야하는 번거로움이 있습니다.파이썬 문법보다는 실전적인 내용에 충실하시려는 의도는 느껴지지만 Type Hint, Decorator, Class 같은 고급문법 정도는 짚고 넘어가주시면 강의내용이 좀 더 이해가 잘 되지않을까 싶습니다.강의 초반부에 뒤에서 설명하시겠다고 하고 넘어가는 부분이 자주 있어서 강의 중반부부터 이해가 되지 않습니다. 실무적인 내용도 좋지만 최소한의 이론적인 설명도 명확하게 짚어주시면 어떨까 싶습니다. 
- 
      
        
    해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)리텐션 연습문제리텐션 연습문제 과제 업로드 합니다!피드백 부탁드립니다!감사합니다! 
- 
      
        
    해결됨[백문이불여일타] 데이터 분석을 위한 기초 SQLWeather Observation Station 12 IN변환 및 관련 질문SELECT DISTINCT CITYFROM stationWHERE lEFT(city,1) NOT IN ('a', 'i', 'e', 'o', 'u')AND RIGHT(city,1) NOT IN ('a', 'i', 'e', 'o', 'u') 위와 같이 엑셀처럼 변경해서 해봤는데 구동은 되서 Submit code 했습니다. 그런데 LIKE와 = 처럼 특정상황에서 =가 더 검색이 빠르듯이 WHERE city NOT LIKE 'a%'AND city NOT LIKE ... 에 비해서 연산속도나 가독성을 고려하면 NOT IN을 사용하는게 좋을까요?아니면 NOT LIKE 형식으로 나열하는게 좋을까요? 질문드립니다.감사합니다. 
- 
      
        
    해결됨초보자를 위한 BigQuery(SQL) 입문2-6 5번 중복 행도 있을 것 이란 가능성을 추가로 염두 했을 때 보강 쿼리 문의안녕하세요! 덕분에 남이 짠 쿼리의 의미는 파악이 가능한 수준이 될 것 같다는 자신감이 든 수강생입니다! 감사합니다.2-6 5번 문제를 직면했을 때 동명이인 = 이름 이외 다른 값이 다 다른 경우로 정의했고, 다행히 강사님의 파일에는 해당하지 않지만, 이름이 같고 다른 값도 다 같은 "중복 데이터"가 있을 수 있다는 가능성도 생각을 했습니다.그래서 혼자 골똘히 고민했는데, (조건이 2개인가? "이름이 같다" and "다른 컬럼이 다르다" 등) 답이 나오지 않아 재생해보니 생각보다 단순한 쿼리여서 놀랐어요.동명이인이 있는 이름은 무엇일까요? + 전체 파일의 중복 데이터는 제거(ex. 엑셀의 중복 값 제거 )는 아래와 같이 하면 될까요?SELECT DISTINCT name, COUNT (name) AS CNT FROM basic.trainer GROUP BY name HAVING CNT>=2 
- 
      
        
    해결됨실습으로 손에 잡히는 SQLD의 정석(2과목)ㅠㅠ 이놈의 환경설정;;안하면 안되나요? 아무것도 못하고 있어요;;너무 어렵네요...ㅠㅠ무슨 docker-compose.yml 이거 실행하는것도 못하고 있어요...파일위치 : C:\Users\orm64\Documents\Scanned DocumentsPS C:\WINDOWS\system32> docker compose up -dno configuration file provided: not foundPS C:\WINDOWS\system32> C:\Users\orm64\Documents\Scanned DocumentsC:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.위치 줄:1 문자:1+ C:\Users\orm64\Documents\Scanned Documents+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundExceptionPS C:\WINDOWS\system32> C:\Users\orm64\Documents\ScannedC:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.위치 줄:1 문자:1+ C:\Users\orm64\Documents\Scanned+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundExceptionPS C:\WINDOWS\system32> pwdPath----C:\WINDOWS\system32PS C:\WINDOWS\system32> C:\Users\orm64\Documents\Scanned DocumentsC:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.위치 줄:1 문자:2+ C:\Users\orm64\Documents\Scanned Documents+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundExceptionPS C:\WINDOWS\system32> docker compose up -dno configuration file provided: not foundPS C:\WINDOWS\system32> docker run hello-worldHello from Docker!This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID: https://hub.docker.com/For more examples and ideas, visit: https://docs.docker.com/get-started/PS C:\WINDOWS\system32> wsl --update업데이트 확인 중입니다.Linux용 Windows 하위 시스템 최신 버전이 이미 설치되어 있습니다.PS C:\WINDOWS\system32> docker run hello-world 
