SQL初めてのSQL

Day 2まとめる・つなぐ — 集計とJOIN

数える・合計する・平均を出す — 集計関数

COUNT(件数)・SUM(合計)・AVG(平均)で、たくさんの行を「1つの答え」にまとめる。

たくさんの行を、1つの数字にまとめる

これまでのSELECTは「1行ずつ取り出す」動きでした。でも実務では「全部で何件あるの?」「合計いくら?」「平均は?」のように、たくさんの行を1つの数字にまとめたいことがよくあります。それをやってくれるのが集計関数です。

たとえるなら、名簿を1枚ずつめくって読むのが今までのSELECT。集計関数は「名簿は全部で何人ぶん?」と最後の1つの数字だけを教えてくれる係の人です。

  • COUNT(...) … 件数を数える(何行あるか)
  • SUM(列) … その列の合計を出す
  • AVG(列) … その列の平均を出す
  • MAX(列) / MIN(列) … 最大・最小を出す

COUNT — 件数を数える

SQL
SELECT COUNT(*)
FROM users;
usersテーブルに何行(何人)あるかを数える。COUNT(*) は「行数を数えて」の意味。

COUNT(*) は「全部の行を数えて」という読み方をします。* は「すべて」の記号でしたね(Day1で登場)。結果は「42」のような数字が1つだけ返ってきます。

SUM と AVG — 合計と平均

SQL
SELECT SUM(price), AVG(price)
FROM orders;
ordersテーブルのprice列を、合計(SUM)と平均(AVG)でまとめる。

「全部を1つにまとめる」ので、行と混ぜられない

SELECT name, COUNT(*) FROM users; のように、集計していない列(name)と集計(COUNT)を素朴に並べると、多くのDBでエラーになります。「1行ずつのname」と「全体で1つの件数」は、そのままでは同じ表に並べられないからです。行ごとに分けて数えたいときは、次のレッスンのGROUP BYを使います。

AIにはこう聞く

「usersテーブルの行数と、ordersテーブルのpriceの合計・平均を出すSQLを書いて。集計関数の意味も一言ずつ添えて」と頼むと、COUNT・SUM・AVGの形を確認できます。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

SELECT COUNT(*) FROM users; は何を返す?

Q2

SUM(price) と AVG(price) は、それぞれ何を出すSQLか、名簿や伝票のたとえを使って説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。