Skip to content

Files

Latest commit

 

History

History
247 lines (183 loc) · 4.98 KB

220817.md

File metadata and controls

247 lines (183 loc) · 4.98 KB

2022-08-17 / DB 2일차 실습

사전 확인

실행

$ sqlite3 healthcare.sqlite3 

Column 출력 설정

sqlite3> .headers on 
sqlite3> .mode column

table 및 스키마 조회

sqlite3> .tables
healthcare

sqlite3> .schema healthcare
CREATE TABLE healthcare (
    id PRIMARY KEY,        
    sido INTEGER NOT NULL, 
    gender INTEGER NOT NULL,
    age INTEGER NOT NULL,  
    height INTEGER NOT NULL,
    weight INTEGER NOT NULL,
    waist REAL NOT NULL,   
    va_left REAL NOT NULL, 
    va_right REAL NOT NULL,

    blood_pressure INTEGER 
    NOT NULL,
    smoking INTEGER NOT NULL,
    is_drinking BOOLEAN NOT NULL
);

문제

1. 추가되어 있는 모든 데이터의 수를 출력하시오.

SELECT COUNT(*) FROM healthcare;
COUNT(*)
--------
1000000

2. 연령 코드(age)의 최대, 최소 값을 모두 출력하시오.

SELECT MAX(age), MIN(age) FROM healthcare;
MAX(age)  MIN(age)
--------  --------
18        9

3. 신장(height)과 체중(weight)의 최대, 최소 값을 모두 출력하시오.

SELECT MAX(height), MIN(height), MAX(weight), MIN(weight) FROM healthcare;
MAX(height)  MIN(height)  MAX(weight)  MIN(weight)
-----------  -----------  -----------  -----------
195          130          135          30

4. 신장(height)이 160이상 170이하인 사람은 몇 명인지 출력하시오.

SELECT COUNT(*) FROM healthcare WHERE height BETWEEN 160 AND 170;
COUNT(*)
--------
516930

5. 음주(is_drinking)를 하는 사람(1)의 허리 둘레(waist)를 높은 순으로 5명 출력하시오.

(추가 조건: 공백 제거하는 조건 추가) NULL 이랑 공백이랑 다른 개념

SELECT id, waist FROM healthcare WHERE is_drinking=1 and waist !='' ORDER BY waist DESC LIMIT 5;
waist
-----
146.0
142.0
141.4
140.0
140.0

6. 시력 양쪽(va_left, va_right)이 1.5이상이면서 음주(is_drinking)를 하는 사람의 수를 출력하시오.

SELECT COUNT(*) FROM healthcare WHERE (va_left>=1.5 AND va_right>=1.5) AND is_drinking=1;
COUNT(*)
--------
36697

7. 혈압(blood_pressure)이 정상 범위(120미만)인 사람의 수를 출력하시오.

SELECT COUNT(*) FROM healthcare WHERE blood_pressure<120;
COUNT(*)
--------
360808

8. 혈압(blood_pressure)이 140이상인 사람들의 평균 허리둘레(waist)를 출력하시오.

SELECT AVG(waist) FROM healthcare WHERE blood_pressure>=140;
AVG(waist)
----------------
85.8665098512525

9. 성별(gender)이 1인 사람의 평균 키(height)와 평균 몸무게(weight)를 출력하시오.

SELECT AVG(height), AVG(weight) FROM healthcare WHERE gender=1;
AVG(height)       AVG(weight)
----------------  ----------------
167.452735422145  69.7131620222875

10. 키가 가장 큰 사람 중에 두번째로 무거운 사람의 id와 키(height), 몸무게(weight)를 출력하시오.

SELECT id, height, weight FROM healthcare ORDER BY height DESC  LIMIT 1 OFFSET 1;
id     height  weight
-----  ------  ------
46642  195     100

11. BMI가 30이상인 사람의 수를 출력하시오.

BMI는 체중/(키*키)의 계산 결과이다. 키는 미터 단위로 계산한다.

SELECT COUNT(*) FROM healthcare WHERE (weight/((height*0.01)*(height*0.01)))>=30;
COUNT(*)
--------
53121

12. 흡연(smoking)이 3인 사람의 BMI지수가 제일 높은 사람 순서대로 5명의 id와 BMI를 출력하시오.

BMI는 체중/(키*키)의 계산 결과이다. 키는 미터 단위로 계산한다.

SELECT id, (weight/((height*0.01)*(height*0.01))) FROM healthcare WHERE smoking=3 ORDER BY (weight/((height*0.01)*(height*0.01))) DESC LIMIT 5;

-- BMI 별칭 만들어서 사용하기
SELECT id, (weight/((height*0.01)*(height*0.01))) AS BMI FROM healthcare WHERE smoking=3 ORDER BY BMI DESC LIMIT 5;
id      (weight/((height*0.01)*(height*0.01)))
------  --------------------------------------
231431  50.78125
934714  49.9479708636837
722707  48.828125
947281  47.7502295684114
948801  47.7502295684114

13. 자유롭게 쿼리를 작성해주시고, 결과와 함께 공유해주세요. [나이가 제일 많은 사람의 sido]

SELECT sido, MAX(age) FROM healthcare; 
sido  MAX(age)
----  --------
27    18

14. 자유롭게 쿼리를 작성해주시고, 결과와 함께 공유해주세요. [술을 안마시는데 혈압 120 이상인 사람의 수]

SELECT COUNT(*) FROM healthcare WHERE is_drinking=0 AND blood_pressure>=120;
COUNT(*)
--------
268500

15. 자유롭게 쿼리를 작성해주시고, 결과와 함께 공유해주세요. [키가 170 이상인 사람 중에 몸무게가 두번째로 많은 사람의 체중]

SELECT weight FROM healthcare WHERE height >= 170 ORDER BY weight DESC LIMIT 1 OFFSET 1;
weight
------
135