DS가 되기 위한 여정 👩‍💻
728x90
반응형

Data Science 89

[Elice sql] 쿼리 순서 주의할 것 select는 실행이 마지막임!

- elice 코딩에서 sql 강의를 듣기 시작했는데,BMI..? 이거 지금 select 실습인데.. 안 풀린다고..???이게 무슨 일이야... ++ elice 코딩은 실습기가 mariaDB임. - 맨날 mysql만 했는데 아직까지 차이는 모르겠으나.. 무료로 접할 수 있는 기회가 되어서 그냥 엘리스에서 듣는 중  하다가... 그래 순서.. 근데 그럼 서브쿼리 말고 방법이 없는 건가? 수정 전select *, 10000*(weight / (height * height)) as BMIfrom studentwhere BMI >= 25 OR BMI  수정 후  - 사실은 방법이 3개가 있음. 왜.. where절에 냅다 할 생각을 못한 건지 ㅋㅋㅋ..ㅎ1. having 으로 바로 사용 2. 서브쿼리 사용3. w..

Data Science/SQL 2025.02.24

[프로그래머스 sql] 트리구조에서 cte recursive, 리프 노드

멸종위기의 대장균 찾기 - 아니 무슨 대장균 찾기의 끝이 없냐...  수정 전 - 방금 전 한 대로 cte recursive 를 써보려는 데 런타임 에러가 뜸...- 또, cte에서는 not in을 쓸 수 없대. WITH RECURSIVE GEN AS ( SELECT ID, 1 AS GENERATION FROM ECOLI_DATA WHERE PARENT_ID IS NULL -- 1세대 UNION ALL SELECT A.ID, B.GENERATION + 1 AS GENERATION FROM ECOLI_DATA A, GEN B WHERE A.PARENT_ID NOT IN (B.ID))SELECT COUNT(ID) AS COUNT, GENER..

Data Science/SQL 2025.02.19

[프로그래머스 sql] cte recursive

- 이전 문제 풀이 다른 사람들이 한 것을 보다가 재귀를 사용하신 분이 있었는데,depth를 활용해서 하는 게 아직도 익숙하지 않아서 그분의 답을 보며 아래에 정리하면서 공부하려고 함.  앞이랑 똑같은  문제이다.  특정 세대의 대장균 찾기WITH RECURSIVE RE AS ( -- (1) 초기 조건: 최상위 부모 노드 찾기 (Depth = 1) SELECT ID, 1 AS DEPTH FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL -- (2) 재귀적으로 하위 노드를 탐색하여 Depth 증가 SELECT A.ID, B.DEPTH + 1 AS DEPTH FROM ECOLI_..

Data Science/SQL 2025.02.19

[프로그래머스 sql] join 시 참조 관계 주의 할 것.

특정 세대의 대장균 찾기 수정 전- 이전 포스팅 보면서 cte로 최대한 만들었음.- 근데.. 굴러는 가는데 값이 안 뜸...ㅎ (그게 어디냐...)WITH SECOND AS ( SELECT S.ID, S.PARENT_ID FROM ECOLI_DATA F JOIN ECOLI_DATA S ON F.ID = S.PARENT_ID WHERE F.PARENT_ID = 'NULL')SELECT T.ID FROM ECOLI_DATA TJOIN SECOND S ON T.ID= S.PARENT_IDWHERE S.PARENT_ID = T.IDORDER BY ID; 수정 후1- 근데 그래도 안됌...- 로직이 틀렸나보다..WITH SECOND AS ( SELECT S.ID, S.PARENT_ID ..

Data Science/SQL 2025.02.19

[프로그래머스 sql] 윈도우 함수

윈도우 함수 - 맨날 헷갈려서.. 지피티한테 물어서 정리함.  - sql 데이터 집합을 계산해서 수행하는 함수로, row행 단위로 결과 반환하면서, - 전체 결과 집합에 대한 계산을 기반으로 함. => 각 행 계산 + 같은 그룹에 적용되도록 - over 절: 함수에서 계산을 적용할 윈도우(그룹 or 범위) 정의- order by: 윈도우 내에서 데이터를 어떯게 정렬할지 정의  - partition by: 위도우를 그룹화할 때 사용 SELECT ID, SIZE_OF_COLONY, NTILE(4) OVER (PARTITION BY ID ORDER BY SIZE_OF_COLONY DESC) AS QUARTILEFROM ECOLI_DATA; - ntile(n)- n개 그룹으로 나누고, 각행이 어느 그..

Data Science/SQL 2025.02.16

[프로그래머스 sql] percent_rank(), NTILE()

대장균의 크기에 따라 분류하기 2 수정 전 - 이게 그냥 내 최선이었음... 하..- 진짜ㅣ... 함수따위 쓸줄 모르는.. 무식한 방법이었다.. -- ORDERBY로 크기를 순서대로 하고, count(*)로 나눠서 *100 하고, 그 지점이 .25, .50, .7, 1 인데.. 이걸 어케 해야 하냐.. -- 서브쿼리 같은데...SELECT ID, CASE WHEN SIZE_OF_COLONY 0.25 AND SIZE_OF_COLONY 0.5 AND SIZE_OF_COLONY 0.75 AND SIZE_OF_COLONY  수정 후 1- percent_rank() 윈도우 함수로 백분율을 더 정확히 확인 가능- 근데 시도하니깐.. 답이 계속 틀림...WITH RANKED AS ( SELECT I..

Data Science/SQL 2025.02.16

[프로그래머스 sql] 비트 연산(&), join 제발 쓸 것. 한 번에 한 정보만이니까

부모의 형질을 모두 가지는 대장균 찾기수정전SELECT ID, GENOTYPE, PARENT_ID AS PARENT_GENOTYPEFROM ECOLI_DATAWHERE (GENOTYPE & PARENT_ID = 1)ORDER BY ID; - 여기까진 했는데.. 값이 실패로 뜬다.. - 부모의 형질이랑 같은 형질인 경우를 찾는 거니깐 맞을 거 같은데 뭐가 문제일까 - null을 따로 안 뺀 거..? 근데 그건 어차피.. 저 조건에서 걸리는 게 아닌가?  수정후1- 문제를 잘못 이해했음...문제를 똑바로 읽을 것 이것은 독해력의 문제이다..- 한 테이블에서 여러개를 가져와서 동시에 비교하지 못하기 때문에 무조건 join을 써야 함. - 그 상태에서 비트 연산을 쓸 때도.. 참일 때 1일인게 중요한 것이 아니..

Data Science/SQL 2025.02.15

[프로그래머스 sql] 이진수로 바꾸기 bin(), 비트 연산(&)

특정 형질을 가지는 대장균 찾기수정전SELECT COUNT(GENOTYPE)FROM ECOLI_DATAWHERE BIN(GENOTYPE) - 오랜만에 풀으러 들어왔더니..수정전에 의미도 없다. 이진으로 만들긴해야 하는데 어떻게 해야 하지하고, bin()을 찾긴 했는데.. 이걸 어떻게 조건으로 해야 하나 ..머리가 백지 같다.   수정후1- case로 처리해야 하나, 했는 데 그냥 and로 조건을 주면 됨..- 어떤 분이 substr()로 해당 값을 비교하심SELECT COUNT(*) AS COUNTFROM ECOLI_DATAWHERE SUBSTRING(BIN(GENOTYPE), -2, 1) != '1' -- 2번짼 1이 아니어야 함AND (SUBSTRING(BIN(GENOTYPE), -1, 1) = '1..

Data Science/SQL 2025.02.15

[프로그래머스 sql] coalesce()로 null 다른 값으로 변환

12세 이하인 여자 환자 목록 출력하기 - 이게.. 왜 안될까.. ?  수정 전SELECT PT_NAME, PT_NO, GEND_CD, AGE, CASE WHEN TLNO = NULL THEN TLNO = 'NONE' ELSE TLNO -- none이 안 뜨고.. 사라짐. END AS TLNOFROM PATIENTWHERE AGE  수정 후 1)- 얼추 맞는 코드로 보이나..- 근데, tlno가 숫자로 되어 있기 때문에.. 제대로 동작하지 않음.SELECT PT_NAME, PT_NO, GEND_CD, AGE, CASE WHEN TLNO IS NULL THEN 'NONE' ELSE TLNO -- null, none은 = 연산자가 안되서, is 써야 함.. END AS TLNOFROM PATIENTW..

Data Science/SQL 2025.02.04

[프로그래머스 sql] date_format() 사용할 것.

흉부외과 또는 일반외과 의사 목록 출력하기 - sql 형변환을.. 어떻게 해야하지..?그냥 시간만 잘라야 하나.. 고민하다가 다른 분들 답변을 보니깐substr() 로 그냥 시간 부분을 자르는 분들도 있었는데date_format()사용해서 딱 해당 부분만 출력하시는 분의 답변을 가져왔다.  수정 전SELECT DR_NAME, DR_ID, MCDP_CD, date(HIRE_YMD) -- 어찌할 바를 모르고,, 냅다 date 시전FROM DOCTOR WHERE MCDP_CD = 'CS' OR MCDP_CD ='GS'ORDER BY HIRE_YMD DESC, DR_NAME; 수정 후SELECT DR_NAME, DR_ID, MCDP_CD, date_format(HIRE_YMD, '%Y-%m-%d') as HI..

Data Science/SQL 2025.02.04
728x90
반응형