2017-07-18 15 views
0

2つまたは3つのキーに基づいてテーブルの情報をランク付けした列を作成するにはどうすればよいですか?例えば 、この表にランク変数が部署や名前に基づいています。sqliteのテーブルの行のランク付け方法は?

Dep | Name | Rank 
----+------+------ 
1 | Jeff | 1 
1 | Jeff | 2 
1 | Paul | 1 
2 | Nick | 1 
2 | Nick | 2 

私はthis solution発見したが、それはSQLでだと、すべての情報が一つのテーブルにあるように私はそれが私の場合に適用されるとは思いません応答はSELECTとJOINが異なるテーブルの情報を組み合わせているようです。 あなたは、現在のグループの現在の行の前に来るどのように多くの行カウントすることができ、事前

+0

例のデータを出力してください。 –

+0

2つの関連する列からランクはどのように決定されますか?特に同一の値はJeffとNickの2つの異なるランクを与えるからです。 – Yunnosch

+0

こんにちは@CL。私の希望する出力は 'Rank'列、@Yunnoschは階級がDepartmentとNameに基づいて決まります。だから、多くの部門に複数のニックがあるかもしれませんが、ランクの列は各部門の各ニックを別々にランク付けする必要があります。 – Question

答えて

1

にありがとう:。

UPDATE MyTable 
SET Rank = (SELECT COUNT(*) 
      FROM MyTable AS T2 
      WHERE T2.Dep = MyTable.Dep 
       AND T2.Name = MyTable.Name 
       AND T2.rowid <= MyTable.rowid); 

rowid列が他の点では同じ行を区別するために使用される主キーを使用して、

+0

それは完璧に働いてくれてありがとうございます。私はこの 'CREATE TABLE MyTable_ID(ID整数プライマリキーautoincrement、department、person)で今まで持っていなかった' rowid'カラムを最初に作成しなければなりませんでした。 INSERT INTO MyTable_ID(部門、人)SELECT部門、人FROM MyTable_original;そして、テーブルに追加の列を作成しました。MyTable_ID 'ALTER TABLE MyTable_ID ADD COLUMN Rank;' @CLのコードの場合。テーブルMyTable_IDの名前をMyTableに変更する必要があります。 – Question

+0

することができます。なぜT2を使用するのか説明してください。なぜ、既存のテーブル内の列を計算するために一時テーブルT2を使用する必要があるのですか? – Question

+0

一時テーブルはありません。副問合せは2つの異なる行の値を参照する必要があるため、ASは表名の別名を作成します。 –

関連する問題