人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLでの順位付けについて

以前にこちらで教えていただいたSQlでの順位付けを活用して、順位付けを行いました。
が、以下の記述だとエラーになってしまいます。

SELECT income,bonus,income*12+bonus AS sougaku ,
(SELECT COUNT(*) FROM table AS sub WHERE sub.sougaku > main.sougaku )+1 AS rank
FROM table AS main
ORDER BY sougaku DESC


income=月収
bonus=ボーナス
sougaku=年収(月収に12を掛けて、ボーナスを足している)

として年収で順位付けが出るようにしたいのです。


「income*12+bonus AS sougaku 」の処理が間違っているだと思うのですが、いろいろと変更をしてもうまくいきません。


年収でランク付けができるように解決法をご教授ください。

●質問者: jamis
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●30ポイント

>「income*12+bonus AS sougaku 」の処理が間違っているだと思うのですが、

まず 確認ですが
「income*12+bonus AS sougaku 」をはずした場合は、エラーとならない?

出力されるエラーの内容は?

incomeとbonus の型は?

「income*12 AS sougaku 」としたら エラーは 出ないか?


きゃづみぃさんのコメント
あと それぞれの項目に NULLが含まれる恐れはありますでしょうか? その場合は、NULLの対応が必要となります。 ま、NULLがあってもエラーとは ならないでしょうけど。

jamisさんのコメント
ありがとうございます。 エラー文はこちらです。 #1054 - Unknown column 'sub.sougaku' in 'where clause' 「income*12 AS sougaku 」としても、上記と同様のエラー文が現われます。 income、bonus、共にint(11)にしてあります。

きゃづみぃさんのコメント
(SELECT COUNT(*) FROM table AS sub WHERE sub.sougaku > main.sougaku ) このSQLの中で sub.sougaku を使ってますが、 tableの中に sougaku という項目は ありますか?

きゃづみぃさんのコメント
エラーの内容は 'sub.sougaku' というのが where句で使われてるけど 見当たらないよ といった感じのものです。

jamisさんのコメント
そうなのですか。 テーブルには存在していません。 ASで言い換えれば、それをフィールドととらえてくれると思い込んでおりました。

2 ● だわかき
●10ポイント

これで試してみて下さい。

SELECT income,bonus,income*12+bonus AS sougaku,
 (SELECT COUNT(*),income*12+bonus AS sougaku FROM table AS sub WHERE sub.sougaku > main.sougaku) + 1 AS rank 
FROM table AS main
ORDER BY sougaku DESC;

jamisさんのコメント
ありがとうございます。 試してみましたが、やはり同じエラーになります。

3 ● a-kuma3
●60ポイント ベストアンサー

「sub.sougaku なんてカラムはありませんよ」みたいなエラーになるということですよね。
main.sougaku とか sub.sougaku というのは、「main テーブルの sougaku 列」という意味ですから、計算結果を指し示すわけではありません。
# この辺りは、既出か (^^;


んで、こんな感じになります。

SELECT income,bonus,income*12+bonus AS sougaku ,
(SELECT COUNT(*) FROM salary AS sub WHERE sub.income*12+sub.bonus > sougaku )+1 AS rank
FROM salary AS main
ORDER BY sougaku DESC

# テーブル名が table というのは気持ち悪いので、salary に変えました


SQL Fiddle で試してみたのがこちらです。
http://sqlfiddle.com/#!2/efcfe0/1


きゃづみぃさんのコメント
数式で 比較させてやればいいんですね。

jamisさんのコメント
ありがとうございます。 なるほど。こうすればいいのですね。全く気づきませんでした。 見事に思い通りの結果になりました。 勉強になりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ