こんにちは私はSQLの世界の初心者ですが、いくつかの基本を機能させるのに苦労しています。
次のようなデータセットがあります。
Table name: Sample
PROJECT WORK ORDER AMOUNT
-----------------------------------------
111 a 100
222 b 200
111 c 300
444 d 400
111 e 500
666 f 600
私はそれが次のようになってしまうことを望みます:
Table name: Sample
PROJECT WORK ORDER AMOUNT PROJECT AMOUNT
--------------------------------------------------------
111 e 500 900
111 c 300 900
111 a 100 900
666 f 600 600
444 d 400 600
222 b 200 200
合計金額が最も多いプロジェクトで並べ替え
Group byは、すべてのプロジェクトを1つにグループ化するため、機能しません。そのため、「Project111」の3つの作業指示行が表示されません。
PROJECT WORK ORDER AMOUNT
-----------------------------------------
111 a 900
222 b 200
444 d 400
666 f 600
最大のプロジェクト価値に基づいて分類することができないため、注文は機能しません。
Table name: Sample
PROJECT WORK ORDER AMOUNT
-----------------------------------------
666 f 600
111 e 500
444 d 400
111 c 300
222 b 200
111 a 100
私の別のアイデアは、別のものを作成できるかどうかでした「プロジェクト」列の値に基づいてプロジェクトの合計を計算する「プロジェクト量」列。代わりに、プロジェクト量で簡単に並べ替えて、目的の形式を実現できます。
Table name: Sample
PROJECT WORK ORDER AMOUNT PROJECT AMOUNT
--------------------------------------------------------
111 e 500 900
111 c 300 900
111 a 100 900
666 f 600 600
444 d 400 600
222 b 200 200
しかし、「プロジェクトの金額」列を取得してすべてのプロジェクトの合計値を計算し、同じプロジェクト番号で表示される行にそれらを表示する方法に苦労しています。
アドバイスはありますか?
回答:
回答№1は4select *
, sum(amount) over (partition by project) as ProjAmount
, row_number() over
from YourTable
order by
ProjAmount desc
金額が最も多い上位2つのプロジェクトのみを選択するには、次を使用できます。 dense_rank
:
select *
from (
select *
, dense_rank() over (order by ProjAmount desc) as dr
from (
select *
, sum(amount) over (partition by project) as ProjAmount
from YourTable
) WithProjAmount
) WithDenseRank
where dr < 3
order by
ProjAmount desc
回答№2の場合は1
プレーンSQLサブクエリを備えたバージョン
SELECT s.*,
(SELECT SUM(Amount) FROM Sample WHERE Project = s.Project) ProjectAmount
FROM Sample s
ORDER BY ProjectAmount DESC
回答№3の場合は0
SELECT a.project ,
a.work ,
a.amount ,
b.proj_amount
FROM project A
JOIN ( SELECT SUM(amount) proj_amount ,
project
FROM project
WHERE project = project
GROUP BY project
) b ON a.project = b.project
ORDER BY proj_amount DESC ,
amount DESC