[PROD]SQLハイスコアスイートセット1(SELECT、SUM/MAX/MIN、GROUP BY)
プログラマSQLハイスコアスイート
https://programmers.co.kr/learn/challenges
SQLの問題を解決する際のポイント
クエリ文の実行順序
SELECT - 5순위 (필수)
FROM - 1순위 (필수)
WHERE - 2순위
GROUP BY - 3순위
HAVING - 4순위 // HAVING 은 GROUP BY가 적용된 이후에 실행됨
ORDER BY - 6순위 // ORDER BY는 모든 데이터들을 조회가 완료된 다음, 최후에 정렬함
SELECT, SUM, MAX, MIN
条件を含めて検索
WHERE 조건 = ''
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick' ORDER BY ANIMAL_ID ASC検索の除外
WHERE 조건 != ''
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION != 'Aged' ORDER BY ANIMAL_ID ASC上位n個のレコード
LIMIT n
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1重複データ削除、非NULL値が集約X
WHERE 조건 IS NOT NULL
COUNT(DISTINCT 조건)
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULLまずWHERE条件によりNAMEはDISTINTを用いてNULL以外のデータの重複データを消去しCOUNTでカウントする
GROUP BY
何種類の動物がいるか数えなさい
SELECT
ANIMAL_TYPE
, COUNT(ANIMAL_ID) AS count -- 그룹화된 것들의 각각의 개수 구함
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE -- 먼저 ANIMAL_TYPE 같은 것 끼리 데이터 그룹화됨
ORDER BY ANIMAL_TYPE ASC
-- ORDER BY는 모든 데이터들을 조회가 완료된 다음, 최후에 정렬함
同名の動物を探す
まず、NAMEはNULLではありません
WHERE NAME IS NOT NULL
名前でグループ化HAVING節では、GROUP BYデータの条件を提供するため、NAME数をCOUNTとし、2より大きいデータのみを受け入れる
HAVING COUNT(NAME) >= 2
名前でソートSELECT
NAME
, COUNT(NAME) as COUNT
FROM ANIMAL_INS
WHERE NAME is NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME
養子縁組取得時間(1)
編み始めたばかりのハーモニー
SELECT
HOUR(DATETIME)
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR(DATETIME) >= 9 and HOUR(DATETIME) < 20
ORDER BY HOUR(DATETIME)
SQLの実行中にエラーが発生しました.Unknown column 'DATETIME' in 'having clause'
HAVINGを賭けるときは純粋なcolumn名を使います!
HAVING HOUR(DATETIME)
=> HAVING 별칭
SELECT
HOUR(DATETIME) as HOUR
, COUNT(HOUR(DATETIME)) as COUNT
-- 이미 HOUR(DATETIME)으로 group화된 데이터를 가짐
-- COUNT(DATETIME) as COUNT 해줘도 괜찮음
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 and HOUR < 20 -- HOUR 별칭 컬럼 사용
ORDER BY HOUR(DATETIME)
養子縁組取得時間(2)
SETコマンドを使用する必要があります!(ユーザ定義変数)
データベースにない時間を作成するには、0時から23時までにテーブルを作成する必要があります.
カスタム変数by SET
変数宣言法
SET @변수명 = 변수값; -- 변수 선언, 값 대입
SELECT @변수이름; -- 변수 출력
SET以外の文では=
が比較演算子として扱われているため、SELECTを用いて変数や付与を宣言する場合は:=
を用いる!例1
SET @VAR1 = 1;
SET @VAR2 = 2;
SELECT @VAR1; -- 결과 1
SELECT @VAR1 + @VAR2; -- 결과 2
例2SET @start = 15, @finish = 20;
SELECT * FROM EMPLOYEE
WHERE ID BETWEEN @start AND @finish;
養子縁組の視点を得る(2)解答
まず、現在のデータベースにない0~23ポイントの期間をSETで作成します.
SET @HOUR := -1;
SELECT (@HOUR := @HOUR + 1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
テーブルは0~23で完了しましたHOUR変数にHOUR+1を挿入し、表は0から23まで完成する
次にCOUNTテーブルを作成する必要があります
もしHOUR(DATETIME)の養子縁組日の視点がHOUR変数と同じなら、個数COUNTを数えましょう!
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
SET @HOUR := -1; # 변수선언
SELECT (@HOUR := @HOUR +1) AS HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
Reference
この問題について([PROD]SQLハイスコアスイートセット1(SELECT、SUM/MAX/MIN、GROUP BY)), 我々は、より多くの情報をここで見つけました https://velog.io/@letsbebrave/pro-SQL-고득점-kit-모음テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol