• 締切済み

MySQLで現在の順位を取得する方法

masayuki0511の回答

回答No.2

たぶん、#1の方の意見は、ちょっと的外れかと・・・ 失礼。 SELECT COUNT(e1.salary),e0.id,MIN(e0.salary) AS salary FROM emp AS e0, emp AS e1 WHERE e1.salary <= e0.salary GROUP BY e0.id ORDER BY salary; こういうことでしょうか?

php4
質問者

お礼

はい。そんな感じです。 ただ同一salaryがある場合に、同一順位ではなく 順位 金額 1 300,000 2 200,000 3 200,000 としたいんです。 やはり、rowNUMの便利さが身にしみます。

関連するQ&A

  • RANK関数で順位付けする方法

    お世話になります。Oracle初心者です。RANK関数による順位付けについて悩み、検索してもわからず困っております。 次のような表tbがあります。 数値,順 70 10 30 この「順」のカラムに順位を付けて 数値,順 70,3 10,1 30,2 としようとしています。SELECTなら SELECT 数値,rank() over (order by 数値 desc) from tb; が成功します。これでupdateする場合、 (rank() over (order by 数値 desc))をした値を update tb set 順= とすればよいと思うのですが、うまくいきません。 PL/SQLを使わず、SQLでRANK関数を使って順位付けするにはどのようにしたらよろしいでしょうか。 勉強不足だと思い、申し訳なく思います。何卒よろしくお願いいたします。

  • sqlのwhereで指定した条件の前後を取得したい

    テーブル=T) KEY DATA 001 あ 002 い 003 う 004 え 005 お SQL) SELECT DATA FROM T WHERE KEY = 003 ; 上記のSQLでは、「う」のデータしか取得できませんが、 「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。 ちなみに、 SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2 と SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1 のUNIONでは上手く行きませんでした。 よろしくお願いします。

  • MYSQL バイナリデータ変換取得

    以下のようなbatでunhex(`idm`)を使って変換しているのですが、出力されるデータが他のところも変換されて出力されます。どうしてでしょうか? characterの設定か、SQLがだめなのでしょうか? ECHO OFF SET MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.0\bin" SET character SET sjis;>create_sql.sql ECHO select unhex(`idm`),a.emp_code,a.emp_name_kana from a,b where b.emp_code=a.emp_code into outfile "C:/master.csv" fields terminated by ',';>>create_sql.sql %MYSQLPATH%\mysql.exe -u root -proot test<create_sql.sql exit

    • ベストアンサー
    • MySQL
  • Oracle8のトップN解析

    質問させていただきます。 Oracle8iの場合、トップN解析ということで select id, name from (select id, name from tmp order by id desc) where rownum <= 3; というSQLを作成してidを前から3つだけ検索できますが、 Oracle8の場合、インラインビューでの[order by]が 無効なので、困っています。 よければ、ほかの方法はないものでしょうか?

  • mysql_real_escape_string

    独学数ヶ月の初心者の質問で恐縮です。 もろもろの事情で仕方なくmysql_real_escape_stringを 以下(1)のように使用しなくてはならないと仮定し、 セキュリテイの面で(2)のようにシングルクオテーションつける 事で危険を回避できますか? またシングルクオテーションは(2)のようにつけてはいけない とかありますか?(記述の基本が曖昧なため、ただの確認の質問) (1) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", mysql_real_escape_string($id), mysql_real_escape_string($password)); (2) $sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id", ’mysql_real_escape_string($id)’, ’mysql_real_escape_string($password)’); よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlの操作について

    データを名前を検索し、さらに値段の昇降順に 並べたいのですがどのように入力すれば 表示されるのかわかりません! mysql> select * from shop order by price ASC; と mysql> select * from shop where name like '%java%';といった別々に検索はできるのですが 同時に検索したいのです。どばたかお願いします

    • ベストアンサー
    • MySQL
  • 重複データからの取得方法を教えてください

    id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?

  • PostgresSQL文→MySQL文への変換について

    始めまして、soulutionと申します。 この度、社内イントラネット構築により、備品発注機能をポータルサイトに追加することになりました。 ポータルサイトはphp+mysqlにて動作しております。 なのでphp+mysqlにて備品発注機能を実装しようと思いまして、ベースはショッピングカート機能で作成しようかと思っております。 googleなどでphpによるショッピングカート作成しているフリープログラムを見つけ、プログラム解析をしていたのですが、そのプログラムのデータベースはPostgresSQLベースで組まれており、当方ではPostgresSQL文をMysql文に変換できなかったため、皆様にお力添えしていただけたらと思っております。 いろいろ思考錯誤しましたが、エラーとなりました。。 一応下記に構文を載せておきます。 どうぞよろしくお願い致します。 開発環境(サーバ) OS:windows XP sp2 PHP:バージョン5.28 MySQL:バージョン5.1 エディタ:Adove DreamweaverCS3 ブラウザ:Internet Explore ver6.0 PostgreSQL文(これをMySQL用に変換します) ------------------------------------------------------------ if($mode == 'sort'){ if($a){ $sql = "select * from db01 where a = " . $a . " order by " . $b . " " . $c; }else{ $sql = "select * from db01 order by " . $b . " " . $c; } }else{ $sql = "select * from db01 order by " . $b . " " . $c; } MySQL(当方が考えました) ------------------------------------------------------------ if($mode == 'sort'){ if($a){ $sql = "select * from db01 where a=$a ORDER BY $b.$c "; $mysql->query($sql); }else{ $sql = "select * from db01 ORDER BY $b.$c"; $mysql->query($sql); } }else{ $sql = "select * from db01 ORDER BY $b.$c"; $mysql->query($sql); } エラー ------------------------------------------------------------ Fatal error: Call to undefined function pg_query() in C:\Program Files\Apache Group\Apache2\htdocs\Prototype\equipment-order.php on line 408

    • 締切済み
    • PHP
  • Selectした時のレコードの取得順

    SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると  (1)Select * From TableA ;  (2)Select * From TableA Order by Data1 Asc;  (3)Select * From TableA Order by Data1 Asc, No Asc;  (1)(2)(3)全て、次の順で返ってきました。   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500  しかし、(2)のSQLは、データによって  次の順で返ってくることがありました。   3| AAA | 300   1| AAA | 100   2| AAA | 200   4| ABC | 400   5| BBB | 500    1~3レコード目までは全てData1がAAAのレコードですが  特に指定していなくても、No(PK)の順になるのかと思っていました。    なお、レコードができた(Insert順)でもなさそうです。  この、順番は何で決まっているのでしょうか?  

  • sqglについて

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL