プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】SELECT文 ORDER BYをやるのを忘れてました -19-

www.pon-x.jp

前回の続き

読者から、ソートの話が出てきているけど、ORDER BYの説明ってやってませんよね!?というご指摘を頂いた。
そのとおり、やっておりませんでした。
誠に失礼しました・・・。ということで、今回はソートの話です。

ORDER BY

ORDER BYは数値だったら小さい順に、文字だったらアルファベット順に並べてくれる。
日本語でのソートはひらがなやカタカナならよいが、漢字交じりであったらおすすめはしない。
では、Person.PersonテーブルのFirstNameでソートしてみる。

SELECT * 
FROM Person.Person
ORDER BY FirstName

こんなかんじにソートできる。
f:id:hanabusa-snow:20201204103203p:plain

デフォルトは上り順だが、下り順もできる。
がASCが登り順で、DESCが下り順。

試しに下り順

SELECT * 
FROM Person.Person
ORDER BY FirstName DESC

f:id:hanabusa-snow:20201204103407p:plain

複数のカラムを用いることもできる

例えば、最優先がFirstNameの上りで2番目にLastNameの下りでソートするとこうなる。

SELECT * 
FROM Person.Person
ORDER BY 
    FirstName ASC,
    LastName DESC

こんなかんじ。 f:id:hanabusa-snow:20201204103645p:plain ちなみにASCはなくても結果は同じ。

注意

エイリアスを指定している場合、例えばGROUP BYとかを使って集計し、集計結果でソートしたいときなんかは、エイリアス名を指定する。

SELECT 
    PersonType,
    count(BusinessEntityID) as CNT
FROM Person.Person
GROUP BY PersonType
ORDER BY CNT

こんなかんじになる。
f:id:hanabusa-snow:20201204104114p:plain

実は、カラム順で指定できる。

左から何番目かという指定ができる。
めんどくさがり屋にはとてもよいが、可読性が悪くなるので注意が必要だ。

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

こんなかんじになってしまう。
f:id:hanabusa-snow:20201204104332p:plain
たまに、文字列カラムに数値が入っていることがあるので、そんなときは注意しましょう。







以上、今回はここまで。
ちなみにCASE式を使ったソートは前回やったのでそちらをご参照ください。m( )m