【SQL】ALL, ANYの使い方
ちょっと前に書いた以下の記事について、CodeIQからフィードバックが来ました。
【SQL】COUNTが最大のものだけを抽出する - 16bit!
で、そのフィードバックでは"ALL"というキーワードを使っていたのですが、
正直そのキーワード知らなかったのでメモを兼ねてちょっと書いておきます。
なお、フィードバックをそのまま載せるとまずい気がするので、テーブルとかは適当にオリジナルです。
使い方
使い方は"{カラム名} >= ALL({サブクエリ})", ""{カラム名} >= ANY({サブクエリ})""みたいな感じです。
ALLでは、サブクエリで取れる全ての値について条件を満たす場合にtrue、
ANYでは、サブクエリで取れる値のうち、いずれか1つでも条件を満たす場合にtrueになります。
例題
seisekiテーブル
seito | kamoku | tokuten |
---|---|---|
鈴木くん | 英語 | 72 |
鈴木くん | 数学 | 84 |
鈴木くん | 国語 | 80 |
鈴木くん | 理科 | 90 |
鈴木くん | 社会 | 66 |
山田くん | 英語 | 50 |
山田くん | 数学 | 62 |
山田くん | 国語 | 70 |
山田くん | 理科 | 40 |
山田くん | 社会 | 55 |
上記のようなテーブルから、5科目の平均点が最も高い生徒を探します。
select seito, AVG(tokuten) from seiseki group by seito having AVG(tokuten) >= ALL (select AVG(tokuten) from seiseki group by seito);
こんな感じ。
実質的には、
select seito, AVG(tokuten) from seiseki group by seito having AVG(tokuten) = (select MAX(avg_tokuten) from (select AVG(tokuten) as avg_tokuten from seiseki group by seito));
このようにgroup byしたビューからmax値を取っているのと変わらないですが、
まぁ多少見やすいかな?
記事まで書いといてなんですが、
正直知らなくても困ることはなさそう、という印象でした。
終わり。