質問: sql,値の大きい順に値を取得 質問させて頂きます。 db:postgressql 言語:php 現在仕事情報の入ったテーブルから、金額の高い順にデータを10件取り出したいと考えています。 金額の入ったカラムが1つであれば、order by句で取り出すのですが、今回、時給[hour]、月給[month]、年収[year]と3つのカラムが存在しています。 ※下記のid4のように2つ以上の金額情報カラムを持っているデータも存在します。 ※データの中にはnullでなく0が入っているデータも存在します。 [id][hour][month][year] 1 ,1000 ,null ,null 2 ,1200 ,0 ,0 3 ,null ,300000 ,null 4 ,1500 ,200000 ,null 5 ,null ,null ,3200000 ... 100,null ,250000 ,null 質問の内容なのですが、下記のルールに従いデータを取得する際、どのような方法を行えば一番効率的でしょうか。 「ルール」 1. 金額比較の際、 月給はそのまま、 年収は12で割った金額、 時給に関しては、時給×8(1日の平均的労働時間)×20(1月の平均的な労働日数)の金額とします。 2. 2つ以上のカラムに金額を持っていた際は(id4のようなデータ)、金額の大きさに関わらず、年収>月給>時給の順で取得する。 id4のデータならば、時給の方が月給より高いですが、月給のデータを使用します。年収があれば年収優先。 id2の場合、0はnullと同じ扱いと考え、時給のデータを使用します。 このルールをふまえたうえでデータを取得する際、sqlで全データを取得して、phpで高い順を判定するべきか、sqlで取得する時点である程度絞って取得した方が良いのか・・・。 sqlに関しての知識が乏しいため、効率的な方法をご存知の方はアドバイス頂けると大変助かります。 よろしくお願いします。
回答: ムリ。というか、nullと0の扱いが一緒なら nullがなければいいと思うんですが。 nullがあるせいで凄いごりごりしないと いけないですね。 結論的に、どうしてもnullが必要ならnullは 見直さなくてもいいけど、db設計を見直すのが 早いでしょう。 データが登録されるタイミングで、ソート用の 列があれば楽です。 算数、nullを0に置換済みの列を設けて、それを インデックスにしてソートすればいいです。 考えるのがめんどいので、今の設計上での 実現方法は他の方におまかせです。