SQLで数が多い順番にselect結果を表示する
ちょっと前にZabbixの障害を調査したときにSQLでいろいろ操作をしていましたが、例えばこんなテーブルがあったとして、
itemid | data |
---|---|
1111 | aaaa |
2222 | bbbb |
1111 | cccc |
1111 | dddd |
2222 | eeee |
itemidの出現回数が多い順番(または少ない順番)のselectしたい。上記がテキストデータで、スペースでセパレートされたいたとしたらこんな感じで実現できる。
$ awk '{print $1}' | sort | uniq -c | sort -n
sortしてuniqでカウントして、もういっかいsortする。apacheのログでipアドレスのsourceをカウントするのにつかったりします。
SQLだとどうやるんだっけ、としばらく考えたり調べたりして以下。
SQL> select itemid,count(itemid) from table_name group by itemid order by count(itemid);
意外と単純でした。