본문 바로가기

전체 글131

MySQL load data workbench의 import wizard 를 사용하면 너무 오래 걸리는 문제때문인지 row를 날려먹는다. 콘솔에서 load data를 사용하는것이 가장 빠르다고 하여 시도해 본 것들을 정리해 보겠다. 1. 환경변수 등록. 콘솔에서 mysql 명령어가 작동하지 않았다. installer로 설치하는 과정에 path관련 항목이 있길래 당연히 나는 환경변수 편집이 되어 있을 줄 알았다. windows 답게 안되어있는걸 보니 머리에 열이 조금 찼다. 이렇게 MySQL Sever bin 폴더를 환경변수 path에 넣어주니 mysql 명령어가 cmd에서 잘 작동했다. 2. workbench connection 수정 콘솔에서 아무리 local infile =1 을 줘도 workbench에는 적용이 안되는걸 보니 더.. 2024. 3. 9.
프로그래머스 데이터분석 데브코스 4-5 sql 지식을 배우기 보단 sql을 활용하여 분석하는 방법을 배웠다. 가볍게 정리하면 아래와 같다. 결측치 확인 중복 확인 중복 제거를 위해 중복 값들의 데이터셋 이해, 행끼리 구분이 불가능한 데이터셋 존재 // 이 경우 중복이 발생함. 데이터셋 간 중복 여부가 분석 결과에 영향을 주는지 판단 해야함 쿼리 사용 방법에 따라 굳이 python 사용하지 않아도 데이터 분석 가능 쿼리 날려서 eda 한 후 python으로 활용 분석 기준을 세우고, 쿼리로 확인해 보고, python 활용해서 검증 분석 결과가 상식과 맞지 않다면 데이터 품질과 알고있는 상식을 다시한번 체크 sql에서도 상관계수 구할 수 있지만 엑셀, python 에서 구하는게 훨씬 쉬움 엑셀 correl, python pd.corr(df1), .. 2024. 3. 8.
SQL 중성화 여부 파악하기 O, X를 판별하고 출력하기 위해 IF문 사용했다. Neutered, Spayed로 시작하는 SEX_UPON_INTAKE 필드의 레코드를 찾기 위해 LIKE 사용했다. CASE WHEN 을 사용해도 잘 작동하지만 가독성 때문에, TRUE, FALSE로 나눠지는 문제라서 IF로 작성했다. 정답코드 SELECT ANIMAL_ID, NAME, IF( SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%' ,'O','X') AS '중성화' FROM ANIMAL_INS 원래 필드를 수정해서 조회하려고 엄청나게 돌아가다가 단순히 O, X 로 출력만 하면 되는걸 깨닫고 O, X 넣었더니 바로 정답처리가 되었다. REPLACE, ALTER, UPDATE에.. 2024. 3. 7.
SQL 카테고리 별 상품 개수 구하기 SUBSTRING함수로 문자열 슬라이싱 했다. GROUP BY로 중복을 찾고 COUNT(*)로 해당 레코드들의 갯수를 조회했다. 정답코드 SELECT SUBSTRING(PRODUCT_CODE,1,2) AS CATEGORY, COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY CATEGORY 2024. 3. 7.
SQL 나이 정보가 없는 회원 수 구하기 WHERE 절로 필터링된 레코드를 세기 위해 COUNT(*)을 사용했다. AGE가 NULL인 레코드를 필터링 하기 위해 AGE IN NULL 사용했다. SELECT COUNT(*) AS USERS from USER_INFO WHERE 1=1 AND AGE IS NULL 2024. 3. 7.
SQL DATETIME에서 DATE로 형 변환 ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다. ANUMAL_ID, NAME, 날짜 로 출력하기 위해 SELECT문에서 조작했다. %Y-%m-%d , Y를 제외하고 소문자로 사용한 이유는 %Y-%M-%D 를 사용하게 되면 2024-march-7th 방식으로 출력하기에 소문자를 사용했다. 정렬은 문제에서 요구하지 않았기에 진행하지 않았다. 정답코드 SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, ('%Y-%m-%d')) AS '날짜' FROM ANIMAL_INS 2024. 3. 7.
sql 가격이 제일 비싼 식품의 정보 출력하기 FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요. 출력의 컬럼이 fOOD_PRODUCT 테이블의 모든 컬럼이기에 SELECT * 사용했다. 내림차순으로 정렬 후 1개 출력하기 위해 ORDER BY { } DESC LIMIT 1 사용했다. SELECT * FROM FOOD_PRODUCT ORDER BY PRICE DESC LIMIT 1 2024. 3. 7.
프로그래머스 데이터분석 데브코스 4-4 SQL 효율적으로 짜기 / 실수, 불필요한 것 줄이기 1. 테이블을 집합으로 생각하기 테이블을 집합으로 생각하기 = 최대한 작게 필터링 해서 쓰기 2. *, % 사용 지양하기 Limit 걸고 조회하기 파티션이 있는 테이블인지 확인하고 파티션을 필터 조건으로 걸고 조회하기 컬럼이 많은 테이블 조회 시 SELECT * 지양할것 LIKE 사용 시 % 제한적으로 사용하기 // 해당 필드의 형태에 맞게 _ 사용하는 방향, 최대한 탐색이 길어지지 않게. 3. 데이터 타입 잘 확인하기 SQL은 묵시적 형변환을 하기에 형변환에 들어가는 자원을 아끼기 위해 데이터 타입 확인할것 where 절에서 왼쪽 컬럼에 함수 적용 지양하기 // where 절 사용으로 필터링 과정에서 함수가 적용되는 것 보다 필터링 이후 함수 적용하.. 2024. 3. 7.
sql 오랜 기간 보호한 동물(1) 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다. 입양을 가지 못한 동물의 NAME, DATETIME을 조회하기 위해 select에 ANIMAL_INS를 사용했다 ANIAML_INS left join ANIMAL_OUTS 를 하면 ANIMAL_INS 테이블에만 있는 ANIMAL_ID (입양을 가지 못한 동물의 ID) 가 ANIMAL_OUTS 테이블에서는 존재할수가 없다. ID 기준으로 left join을 했을 때 입양을 가지 못한 동물의 ID의 레코드에 NULL값이 존재할 것이다. ANYMAL_TYPE, NAME, SEX_UPON_OUTCOME 컬럼 같은 경우에는 중복된 값들이 .. 2024. 3. 6.