[プログラマー]SQLハイスコアキット:GROUP BY


GROUP BY [リンク]
猫と犬は何匹いますか.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY 
CASE ANIMAL_TYPE
    WHEN 'Cat' THEN 1
    WHEN 'Dog' THEN 2
END;
🔎CASE 칼럼명
	WHEN 조건 THEN 결과
	...
    	ELSE 결과
  END
同名の動物を探す
<SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME;
🔎 WHERE vs HAVING
どちらも条件を与える命令語ですが、WHEREの場合、すべてのテーブルに優先条件を提供し、GROUP BYをグループ化することができる.HAVINGは、GROUP BY後のパケットの新しいテーブルに条件を提供する.
養子縁組取得時間(1)
SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 and HOUR <= 19
ORDER BY HOUR(DATETIME);
🔎 HOUR():日付データからのみ時間を抽出
YEAR MONTH DAY MINUTE SECONDでも構いません
養子縁組取得時間(2)
SET @hour := -1; 
SELECT (@hour := @hour +1) as HOUR ,  -- 1씩 증가시켜서 해당 시간 카운트
        (SELECT COUNT(*) FROM ANIMAL_OUTS 
        WHERE HOUR(DATETIME)=@hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23; 
-- 마지막인 @hour=22가 SELECT절에서 +1되어 23까지 카운트 합니다.
🔎 SET@変数名:=初期値;
  • ユーザ定義変数
  • ストレージ
  • の値は、データ型を決定する.
    (Integer、Decimal、Float、Binary、Float、String対応)
  • を初期化しない場合、NULLの値が生成され、データ型はString
  • である.
  • SQLは、= を比較演算子、:=を代入演算子として使用します.
    (SETセクションでは、両方とも代入演算子として使用できます)