2016-04-13 8 views
4

ある値のSUMが与えられた行のペア(または3,4グループなど)を並べ替える必要があります。列の合計を指定して行のペア/トリプレットを注文する

行がよりよく理解するために名+姓+年齢

の連結に基づいて連続しているが、次の表を与えられた:

ID Name Surname Age Salary 
------------------------------ 
1 John Smith 30 2 
2 John Smith 30 10 
3 Rick James 22 300 
4 Rick James 22 1000 
5 Rick James 22 5 
6 Mike Brown 50 200 
7 Mike Brown 50 20 

私が発注する必要があり、最終的なテーブルを持っているしたいのですがDESCには、各NameのSalary + Surname + Ageの合計で、ID列にもかかわらず、同じName + Surname + Ageの行をそれぞれ隣に置いておくことは異なります。あなたはそれらの総和が1305になりますので、名+姓+年齢を持つ行=「リック・ジャム22」は「マイク・ブラウン50に続いて、一番上にある見ることができるように

ID Name Surname Age Salary 
------------------------------ 
3 Rick James 22 300 
4 Rick James 22 1000 
5 Rick James 22 5 
6 Mike Brown 50 200 
7 Mike Brown 50 20 
1 John Smith 30 2 
2 John Smith 30 10 

:これは期待される結果になります"(合計= 220)と"ジョンスミス30 "(合計= 12)。 さらに、結果の表で行の数が同じである必要があります。

Oracle SQLを使用してこれを行うにはどうすればよいですか?任意のヘルプ

+3

保管年齢を試し毎日が誰かの誕生日であるため、一般的に悪い考えです - と、データが無効になる場合があります。 – jarlh

+0

@jarlh:おそらく、彼らはその給与に昇進した年齢です。 – Quassnoi

+0

こんにちは、行は異なるIDを持ち、名前+姓+年齢が同じ重複を示しています。目標は、最高給与に関連する重複がどれであるかを理解することです。 – Sik

答えて

2
SELECT t.*, 
     COALESCE(SUM(salary) OVER (PARTITION BY name, surname, age), 0) ss 
FROM mytable t 
ORDER BY 
     ss DESC 
+1

パーティションに年齢も追加する必要があります – Madhivanan

+0

これはうまくいくようです。 しかし、私は給与として0を持つすべての結果を最初に取得します(そして新しい特派員の "ss"列は空です)。テーブルの一番下にあるように変更するにはどうすればいいですか? ORA-00923:FROMキーワードが見つかりませんでした。 "COALESCE(SUM(salary)、0)OVER(PARTITION BY名前、姓、年齢)ss ' を試しました。どこに期待された " – Sik

1

ため

おかげで、これを試してみてください:

SELECT ID, Name, Surname, Age, Salary 
FROM (
    SELECT ID, Name, Surname, Age, Salary, 
     SUM(Salary) OVER (PARTITION BY Name, Surname, Age) AS sum_of_sal 
    FROM mytable) t 
ORDER BY sum_of_sal DESC, ID 

クエリがName, Surname, Ageパーティションあたりの給与の合計を計算するためにSUMの窓のバージョンを使用しています。外部クエリでこのフィールドを使用して並べ替えを行うことができます。

+0

サブクエリが不要です。 – sagi

1

またはこの

SELECT ID, Name, Surname, Age, Salary   
    FROM mytable 
    ORDER BY SUM(Salary) OVER (PARTITION BY Name, Surname, Age) DESC, ID