SQLハイスコアスイート


プログラマ

1. SELECT


1)すべてのレコードの表示


-- 코드를 입력하세요
SELECT * from ANIMAL_INS
order by ANIMAL_ID;

2)逆順で並べ替える


-- 코드를 입력하세요
SELECT NAME, DATETIME from ANIMAL_INS
order by ANIMAL_ID desc

3)病気の動物を探す



-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME 
from ANIMAL_INS
where INTAKE_CONDITION = "Sick"
order by ANIMAL_ID;

4)小動物探し


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
where INTAKE_CONDITION != "Aged"
order by ANIMAL_ID;

5)動物のIDと名前



-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
order by ANIMAL_ID;

6)複数条件で並べ替える


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATETIME
from ANIMAL_INS 
order by NAME, DATETIME desc;

7)上位n名記録



-- 코드를 입력하세요

SELECT NAME 
From ANIMAL_INS
ORDER BY DATETIME 
LIMIT 1


-- ORACLE
/*
SELECT NAME
FROM (SELECT * FROM ANIMAL_INS ORDER BY DATETIME)
WHERE rownum = 1;
*/

2. SUM, MAX, MIN


1)最値を求める


-- 코드를 입력하세요
SELECT MAX(DATETIME)
from ANIMAL_INS;

2)最大値を求める


-- 코드를 입력하세요
SELECT MIN(DATETIME)
from ANIMAL_INS;

3)動物数取得



-- 코드를 입력하세요
SELECT COUNT(ANIMAL_ID)
from ANIMAL_INS;

4)重複除外


-- 코드를 입력하세요

SELECT COUNT(DISTINCT NAME)
from ANIMAL_INS
where NAME != "NULL";

-- WHERE NAME IS NOT NULL도 가능

3. GROUP BY


猫と犬は何匹いますか。


-- 코드를 입력하세요
SELECT ANIMAL_TYPE, count(ANIMAL_TYPE)
from ANIMAL_INS
group by ANIMAL_TYPE
order by ANIMAL_TYPE;

2)同名動物を探す


-- 코드를 입력하세요
SELECT NAME, count(NAME)
from ANIMAL_INS
where NAME is not null
group by NAME
having count(NAME) >= 2
order by NAME;

3)養子縁組取得時間(1)


-- 코드를 입력하세요
SELECT hour(DATETIME) HOUR, count(DATETIME) COUNT
from ANIMAL_OUTS
group by hour(DATETIME)
having HOUR >= 9 and HOUR < 20
order by hour(DATETIME);

4)養子縁組取得時間(2)


-- 코드를 입력하세요
set @hour = -1; -- 변수선언

SELECT (@hour := @hour + 1) as HOUR, 
(select count(*) from ANIMAL_OUTS where @hour = hour(DATETIME))
from ANIMAL_OUTS
where @hour < 23;


/*
1. SET 옆에 변수명과 초기값을 설정할 수 있습니다.

2. @가 붙은 변수는 프로시저가 종료되어도 유지된다고 생각하면 됩니다.
- 이를 통해 값을 누적하여 0부터 23까지 표현할 수 있습니다.

3. @hour은 초기값을 -1로 설정합니다. PL/-SQL 문법에서 :=은 비교 연산자 =과 혼동을 피하기 위한의 대입 연산입니다.

4. SELECT (@hour := @hour +1) 은 @hour의 값에 1씩 증가시키면서 SELECT 문 전체를 실행하게 됩니다.
이 때 처음에 @hour 값이 -1 인데, 이 식에 의해 +1 이 되어 0이 저장됩니다.
HOUR 값이 0부터 시작할 수 있습니다.

5. WHERE @hour < 23일 때까지, @hour 값이 계속 + 1씩 증가합니다.


*/

4. IS NULL


1)無名動物のID


-- 코드를 입력하세요
SELECT ANIMAL_ID
from ANIMAL_INS
where NAME is null
order by ANIMAL_ID;

2)名前のついた動物のID


-- 코드를 입력하세요
SELECT ANIMAL_ID
from ANIMAL_INS
where NAME is not null
order by ANIMAL_ID;

3)処理NULL


-- 코드를 입력하세요
SELECT ANIMAL_TYPE, ifnull(NAME, 'No name') as NAME, SEX_UPON_INTAKE
from ANIMAL_INS
order by ANIMAL_ID;

5. JOIN


1)失われたレコードの検索



-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME 
from ANIMAL_INS A right join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where A.ANIMAL_ID is null;

ありません



-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME 
from ANIMAL_INS A join ANIMAL_OUTS B
where A.ANIMAL_ID = B.ANIMAL_ID and B.DATETIME <= A.DATETIME
order by A.DATETIME

3)長期保護動物(1)


-- 코드를 입력하세요
SELECT A.NAME, A.DATETIME 
from ANIMAL_INS A left join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where B.ANIMAL_ID is null
order by A.DATETIME
limit 3;

4)保護に中性化した動物


-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
from ANIMAL_INS A join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
where A.SEX_UPON_INTAKE != B.SEX_UPON_OUTCOME
order by A.ANIMAL_ID;


6. String, Date


1)ルーシーとエラを探す


-- 코드를 입력하세요
SELECT distinct ANIMAL_ID, NAME, SEX_UPON_INTAKE
from ANIMAL_INS
where NAME in ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
order by ANIMAL_ID;

2)elという名前の動物を探す


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
from ANIMAL_INS
where NAME like "%el%" and ANIMAL_TYPE = "Dog"
order by NAME;

3)中性化の有無の決定


-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, 
    CASE WHEN SEX_UPON_INTAKE like "%Neutered%" 
    OR SEX_UPON_INTAKE like "%Spayed%" 
    THEN "O" 
    ELSE "X" 
    END AS "중성화"
from ANIMAL_INS
order by ANIMAL_ID;

4)長期保護動物(2)


-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME
from ANIMAL_INS A, ANIMAL_OUTS B
where A.ANIMAL_ID = B.ANIMAL_ID
order by B.DATETIME - A.DATETIME desc
limit 2;

5)DATETIMEからDATEへの変換


-- 코드를 입력하세요
/*
%Y(4자리 연도), %y(2자리 연도), %m(월), %d(일), %H(24시간), %h(12시간), %i, %s
*/
SELECT ANIMAL_ID, NAME, date_format(DATETIME, '%Y-%m-%d') as 날짜
from ANIMAL_INS
order by ANIMAL_ID;