以前にこちらで教えていただいた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 」の処理が間違っているだと思うのですが、いろいろと変更をしてもうまくいきません。
年収でランク付けができるように解決法をご教授ください。
「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
>「income*12+bonus AS sougaku 」の処理が間違っているだと思うのですが、
まず 確認ですが
「income*12+bonus AS sougaku 」をはずした場合は、エラーとならない?
出力されるエラーの内容は?
incomeとbonus の型は?
「income*12 AS sougaku 」としたら エラーは 出ないか?
エラーの内容は 'sub.sougaku' というのが where句で使われてるけど 見当たらないよ といった感じのものです。
そうなのですか。
テーブルには存在していません。
ASで言い換えれば、それをフィールドととらえてくれると思い込んでおりました。
これで試してみて下さい。
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;
ありがとうございます。
試してみましたが、やはり同じエラーになります。
「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
数式で 比較させてやればいいんですね。
ありがとうございます。
なるほど。こうすればいいのですね。全く気づきませんでした。
見事に思い通りの結果になりました。
勉強になりました。
数式で 比較させてやればいいんですね。
2013/07/26 18:54:31ありがとうございます。
2013/07/26 19:04:59なるほど。こうすればいいのですね。全く気づきませんでした。
見事に思い通りの結果になりました。
勉強になりました。