前回の続き
読者から、ソートの話が出てきているけど、ORDER BYの説明ってやってませんよね!?というご指摘を頂いた。
そのとおり、やっておりませんでした。
誠に失礼しました・・・。ということで、今回はソートの話です。
ORDER BY
ORDER BYは数値だったら小さい順に、文字だったらアルファベット順に並べてくれる。
日本語でのソートはひらがなやカタカナならよいが、漢字交じりであったらおすすめはしない。
では、Person.PersonテーブルのFirstNameでソートしてみる。
SELECT * FROM Person.Person ORDER BY FirstName
こんなかんじにソートできる。
デフォルトは上り順だが、下り順もできる。
がASCが登り順で、DESCが下り順。
試しに下り順
SELECT * FROM Person.Person ORDER BY FirstName DESC
複数のカラムを用いることもできる
例えば、最優先がFirstNameの上りで2番目にLastNameの下りでソートするとこうなる。
SELECT * FROM Person.Person ORDER BY FirstName ASC, LastName DESC
こんなかんじ。 ちなみにASCはなくても結果は同じ。
注意
エイリアスを指定している場合、例えばGROUP BYとかを使って集計し、集計結果でソートしたいときなんかは、エイリアス名を指定する。
SELECT PersonType, count(BusinessEntityID) as CNT FROM Person.Person GROUP BY PersonType ORDER BY CNT
こんなかんじになる。
実は、カラム順で指定できる。
左から何番目かという指定ができる。
めんどくさがり屋にはとてもよいが、可読性が悪くなるので注意が必要だ。
SELECT PersonType, count(BusinessEntityID) as CNT FROM Person.Person GROUP BY PersonType ORDER BY 2
数値の場合はデータ型に気を付けよう。
例えば、文字型の数値をソートすると大小関係ではなく、左から見て1桁目の大小関係を比較してしまう。
試しに、集計結果のカラムを文字型に変えてソートしてみる。
SELECT PersonType, convert(varchar,count(BusinessEntityID)) as CNT FROM Person.Person GROUP BY PersonType ORDER BY CNT
こんなかんじになってしまう。
たまに、文字列カラムに数値が入っていることがあるので、そんなときは注意しましょう。
以上、今回はここまで。
ちなみにCASE式を使ったソートは前回やったのでそちらをご参照ください。m( )m