SQL:SELECT 構文 part2
ORDER BY 句:検索結果を並び替える
$ SELECT * FROM employees ORDER BY <整列キー> <ASC/DESC>;
- ASC は、省略可能。デフォルト値のため。
また、複数条件を指定することも可能。
$ SELECT * FROM employees ORDER BY birth_date DESC, hire_date ASC; 誕生日が大きい(=年齢が若い)順、かつ、入社日が古い順に並び替える
集計関数(集約関数):
SUM, MIN, MAX, AVG, COUNT
COUNT:行数を取得する
COUNT(列名):NULL を除く
COUNT(*):NULL を含む
四捨五入:
ROUND(四捨五入する値, 小数第 X 位)
X = 0 ~WHERE 句では、集積関数は、使えない
読み込まれる順番:FROM -> WHERE -> SELECT
GROUP BY:テーブルを切り分けるイメージ
集計関数と一緒に、使われることが多い。
GROUP BY で指定した 列以外を SELECT では指定できない。
なぜなら、GROUP BY の後に、SELECT 句が読み込まれるから。
各emp_no が何回登場しているかを表わしている。 mysql> SELECT -> emp_no, -> COUNT(*) -> FROM -> salaries -> GROUP BY -> emp_no -> LIMIT 20; +--------+----------+ | emp_no | COUNT(*) | +--------+----------+ | 10001 | 17 | | 10002 | 6 | | 10003 | 7 | | 10004 | 16 | | 10005 | 13 | | 10006 | 12 | | 10007 | 14 | | 10008 | 3 | | 10009 | 18 | | 10010 | 6 | | 10011 | 7 | | 10012 | 10 | | 10013 | 17 | | 10014 | 9 | | 10015 | 1 | | 10016 | 5 | | 10017 | 10 | | 10018 | 16 | | 10019 | 4 | | 10020 | 5 | +--------+----------+ 20 rows in set
例:従業員番号10001から10010の従業員ごとの最小給与と最大給与 mysql> SELECT -> emp_no, -> MAX(salary), -> MIN(salary) -> FROM -> salaries -> WHERE -> emp_no BETWEEN 10001 AND 10010 -> GROUP BY -> emp_no -> LIMIT 20; +--------+-------------+-------------+ | emp_no | MAX(salary) | MIN(salary) | +--------+-------------+-------------+ | 10001 | 88958 | 60117 | | 10002 | 72527 | 65828 | | 10003 | 43699 | 40006 | | 10004 | 74057 | 40054 | | 10005 | 94692 | 78228 | | 10006 | 60098 | 40000 | | 10007 | 88070 | 56724 | | 10008 | 52668 | 46671 | | 10009 | 94443 | 60929 | | 10010 | 80324 | 72488 | +--------+-------------+-------------+ 10 rows in set
HAVING 句:GROUP BY で取得した結果をさらに 絞る
$ SELECT emp_no, MAX(salary) FROM salaries GROUP BY emp_no HAVING MAX(salary) > 100000;
解説: emp_no 10001 ~ 10100 の中で、salaryの最小値が、40,000未満の emp_no と 最小値 を抽出する。 SELECT emp_no, MIN(salary) FROM salaries WHERE emp_no BETWEEN 10001 AND 10100 GROUP BY emp_no HAVING MIN(salary) > 40000 LIMIT 20;