SQL第一歩-3


第5章統計とサブクエリ
🏀 行のカウントを求めます-COUNT
SQLはデータベースと呼ばれるデータセット言語です.これらの集合の個数や総和を知りたい場合は、SQLが提供する統計関数を使用して簡単に求めることができます.集約関数は、一般的な関数で引数で値を指定するのとは異なり、引数で集合を指定します.
nonamequantity1A12A23B104C35NULLNULL
COUNTはその名の通り行数を数える関数です.上の表の名前がtoysであると仮定し、行数を求めるために、次のクエリー文を記入できます.
SELECT COUNT(*) FROM toys;
次の結果が出力されます.
COUNT(*)5
ここでWHERE文を追加して条件を指定できます.上記の例では、Aという名前のローを取得するには、次のクエリ文を使用します.
SELECT COUNT(*) FROM toys WHERE name = 'A';
🏀 重複除外-DISTINCT
コレクションの処理中に、コレクション内の重複値を削除したい場合が多い場合があります.DISTINCTキーワードを使用して、この問題を解決できます.
上のtoysというテーブルからすべての名前の個数を得たいとします.もしそうであれば、重複した名前を消してこそ、その名前の正しい個数を求めることができる.Aという行が2行あっても、Aという行が1行しかないからです.これは、次のクエリ文によって実現されます.比較のために、すべての名前行を求める個数も一緒に理解します.
SELECT COUNT(ALL name),COUNT(DISTINCT name) FROM toys;
上記のクエリ文を入力すると、次の結果が出力されます.
COUNT(ALL name)COUNT(DISTINCT name)43
5行出力4は、5行目にNULL値が出力されたときにCOUNTでカウントされないためです.また、重複が解消されると出力値は3となる.
🏀 グループ-GROUP BY
GROUP BYにより,集合をグループ化し,集約関数の範囲を広げることができる.toysテーブルをnameにグループ化する場合は、次のクエリ文を入力します.
SELECT name FROM toys GROUP BY name;
次の結果が出力されます.
nameABCNULL
これはデータ消去を繰り返す結果のように見え、DISTINCTとは何か違う考えが生まれた.これは、最終的にAという重複除外結果が出力されるためである.
このため,GROUP BYは統計関数を用いた場合に機能する.おもちゃごとの数の和を求めたいとします.これはGROUP BYとSUMの組み合わせで実現できる.次のクエリ文を表示します.
SELECT name, COUNT(name), SUM(quauntity) 
FROM TOYS GROUP BY name;
上記のクエリ文を入力すると、次の結果が出力されます.
nameCOUNT(name)COUNT(quantity)NULL00A23B110C13
GROUP BY nameにより,name列値はA,B,C,NULLの4つのグループに分けられる.Aグループは2行あるので、COUNTで2行を集計します.また,この2行の数が加算されるため,出力の結果は3となる.
🏀 サブクエリの使用
サブクエリは、SELECTコマンドによって実行されるデータクエリであり、上位レベルの追加クエリではなく下位レベルのクエリを表します.サブクエリは、文で指定された下部SELECTコマンドで囲まれて指定されます.もちろん、SELECT球の他に、WHERE、FROMなど、特にWHERE球にも用いられる.
テーブルがあるとします.
非memequantity 1チョコレートケーキ102生クリームケーキ53ヨーグルトケーキ9
まず、このテーブルの最小数量を求めるクエリ文は次のようになります.
SELECT MIN(quantity) FROM cakes;
次に、ケーキの数が最小の行を削除したいと仮定します.このためには、サブクエリを使用します.
DELETE FROM cakses WHERE quantity = (SELECT MIN(quantity) FROM cakes);
これでクリームケーキの行は外され、ケーキテーブルを再確認すると、次のような形になります.
無mequantity 1チョコレートケーキ103 yocutケーキ9
注意:SQLの最初のステップ