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 」の処理が間違っているだと思うのですが、いろいろと変更をしてもうまくいきません。


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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/26 19:19:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154

ポイント60pt

「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

id:taknt

数式で 比較させてやればいいんですね。

2013/07/26 18:54:31
id:jamis

ありがとうございます。
なるほど。こうすればいいのですね。全く気づきませんでした。
見事に思い通りの結果になりました。
勉強になりました。

2013/07/26 19:04:59

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント30pt

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

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

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

incomeとbonus の型は?

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

他3件のコメントを見る
id:taknt

エラーの内容は 'sub.sougaku' というのが where句で使われてるけど 見当たらないよ といった感じのものです。

2013/07/26 18:34:55
id:jamis

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

2013/07/26 18:36:54
id:dawakaki No.2

回答回数797ベストアンサー獲得回数122

ポイント10pt

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

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;
id:jamis

ありがとうございます。
試してみましたが、やはり同じエラーになります。

2013/07/26 18:54:05
id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント60pt

「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

id:taknt

数式で 比較させてやればいいんですね。

2013/07/26 18:54:31
id:jamis

ありがとうございます。
なるほど。こうすればいいのですね。全く気づきませんでした。
見事に思い通りの結果になりました。
勉強になりました。

2013/07/26 19:04:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません