🚩종별 그룹
--2. tblZoo. 종류(family)별 평균 다리의 갯수를 가져오시오.
나의 풀이
SELECT
family AS 종류,
round(avg(leg)) AS 평균다리개수
FROM TBLZOO
GROUP BY family;
🚩종의 체온과 호흡별 그룹
--3. tblZoo. 체온이 변온인 종류 중 아가미 호흡과 폐 호흡을 하는 종들의 갯수를 가져오시오.
나의 풀이
SELECT * FROM TBLZOO;
SELECT
breath AS 호흡,
count(*) AS 개수
FROM TBLZOO
WHERE THERMO = 'variable'
GROUP BY BREATH;
정답
SELECT * FROM tblzoo;
SELECT
count(case
when breath in ('lung') then 1
end) as "변온,폐 호흡",
count(case
when breath in ('gill') then 1
end) as "변온,아가미 호흡"
FROM tblzoo
GROUP BY thermo
HAVING thermo = 'variable';
🚩사이즈와 종류별 그룹
--4. tblZoo. 사이즈와 종류별로 그룹을 나누고 각 그룹의 갯수를 가져오시오.
나의 풀이
SELECT
sizeof,
family,
COUNT(*)
FROM TBLZOO
GROUP BY sizeof, family;
정답
SELECT * FROM tblZoo;
SELECT family||decode(sizeof,'small','소형','medium','중형','large','대형') as 분류, count(family) FROM tblzoo
GROUP BY family,sizeof
ORDER BY family asc, sizeof desc;
🚩중복된 이메일
--12. tblAddressBook. 관리자의 실수로 몇몇 사람들의 이메일 주소가 중복되었다. 중복된 이메일 주소만 가져오시오.
나의 풀이
SELECT
email,
count(email) AS 중복횟수
FROM tblAddressBook
GROUP BY email
HAVING count(email) > 1;
정답
SELECT
email, count(email)
FROM tbladdressbook
group by email having count(email) > 1;
🚩인원수 100명 이상인 성씨
--15. tblAddressBook. 성씨별 인원수가 100명 이상 되는 성씨들을 가져오시오.
나의 풀이
SELECT
substr(name, 1, 1) AS 성씨,
count(*) AS 인원수
FROM tblAddressBook
GROUP BY substr(name, 1, 1)
HAVING count(*) >= 100;
정답
SELECT substr(name,1,1) FROM tbladdressbook group by substr(name,1,1) having count(substr(name,1,1)) >= 100;
🚩스네이크 명명법
--17. tblAddressBook. 이메일이 스네이크 명명법으로 만들어진 사람들 중에서 여자이며, 20대이며, 키가 150~160cm 사이며, 고향이 서울 또는 인천인 사람들만 가져오시오.
나의 풀이
SELECT
*
FROM tblAddressBook
WHERE
email LIKE '%\_%' ESCAPE '\'
AND gender = 'f' -- 여자
AND age BETWEEN 20 AND 29 -- 20대
AND height BETWEEN 150 AND 160 -- 150~160cm
AND hometown IN ('서울', '인천') -- 서울 또는 인천
정답
SELECT * FROM tbladdressbook;
SELECT * FROM tbladdressbook
where instr(email,'_') <> 0 and gender = 'f' and age like ('2_') and height <= 160 and height >= 150 and hometown in ('서울','인천');
🚩특정 직업의 거주 지역 비율
--20. tblAddressBook. '건물주'와 '건물주자제분'들의 거주지가 서울과 지방의 비율이 어떻게 되느냐?
나의 풀이
SELECT
round(sum(CASE WHEN address LIKE '%서울%' THEN 1 ELSE 0 END) / count(*) * 100) || '%' AS 서울거주비율,
round(sum(CASE WHEN address NOT LIKE '%서울%' THEN 1 ELSE 0 END) / count(*) * 100) || '%' AS 지방거주비율
FROM tblAddressBook
WHERE job IN ('건물주', '건물주자제분');
--concat
SELECT
concat(round(sum(CASE WHEN address LIKE '%서울%' THEN 1 ELSE 0 END) / COUNT(*) * 100), '%') AS 서울거주비율,
concat(round(sum(CASE WHEN address NOT LIKE '%서울%' THEN 1 ELSE 0 END) / COUNT(*) * 100), '%') AS 지방거주비율
FROM tblAddressBook
WHERE job IN ('건물주', '건물주자제분');
정답
SELECT job,
round(count(case
when substr(address,1,2) like ('%서울%') then 1
end)/count(job)*100,2)||'%' as "서울 거주자",
round(count(case
when substr(address,1,2) not like ('%서울%') then 1
end)/count(job)*100,2)||'%' as "(비)서울 거주자"
FROM tbladdressbook group by job having job in ('건물주','건물주자제분');