Day 2・まとめる・つなぐ — 集計とJOIN
数える・合計する・平均を出す — 集計関数
COUNT(件数)・SUM(合計)・AVG(平均)で、たくさんの行を「1つの答え」にまとめる。
たくさんの行を、1つの数字にまとめる
これまでのSELECTは「1行ずつ取り出す」動きでした。でも実務では「全部で何件あるの?」「合計いくら?」「平均は?」のように、たくさんの行を1つの数字にまとめたいことがよくあります。それをやってくれるのが集計関数です。
たとえるなら、名簿を1枚ずつめくって読むのが今までのSELECT。集計関数は「名簿は全部で何人ぶん?」と最後の1つの数字だけを教えてくれる係の人です。
- COUNT(...) … 件数を数える(何行あるか)
- SUM(列) … その列の合計を出す
- AVG(列) … その列の平均を出す
- MAX(列) / MIN(列) … 最大・最小を出す
COUNT — 件数を数える
SELECT COUNT(*)
FROM users;COUNT(*) は「全部の行を数えて」という読み方をします。* は「すべて」の記号でしたね(Day1で登場)。結果は「42」のような数字が1つだけ返ってきます。
SUM と AVG — 合計と平均
SELECT SUM(price), AVG(price)
FROM orders;「全部を1つにまとめる」ので、行と混ぜられない
SELECT name, COUNT(*) FROM users; のように、集計していない列(name)と集計(COUNT)を素朴に並べると、多くのDBでエラーになります。「1行ずつのname」と「全体で1つの件数」は、そのままでは同じ表に並べられないからです。行ごとに分けて数えたいときは、次のレッスンのGROUP BYを使います。
AIにはこう聞く
「usersテーブルの行数と、ordersテーブルのpriceの合計・平均を出すSQLを書いて。集計関数の意味も一言ずつ添えて」と頼むと、COUNT・SUM・AVGの形を確認できます。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
SELECT COUNT(*) FROM users; は何を返す?
SUM(price) と AVG(price) は、それぞれ何を出すSQLか、名簿や伝票のたとえを使って説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。