2016-06-18 13 views
0

現在SQLを学習中で、SQLクエリを実行する必要があります。実装に失敗した特定のクエリが1つあります。SQLクエリの最大値が要約

最も高価な注文を(完全に)持っているクライアントはどれですか?

customeridおよびtotal valueは、結果として返されなければなりません。

表は以下のとおりです。

Salesorderheader

salesorderid (int) customerid (int) totaldue (double) 
     1     32000   3.20000 

私が使用するデータベース・システムは、PostgreSQLです。私がこれまでに得たクエリは次のとおりです。total_value(同じ顧客のすべての注文の合計値)または同様のものとしてラベルされた新しい値が代わりに返さなければならないので、

SELECT totaldue, customerid 
FROM salesorderheader 
WHERE totaldue = (SELECT max(totaldue) FROM salesorderheader); 

このクエリは、間違っています。

SQL関数sum()GROUP BY customerid)を組み合わせて使用​​する必要がありますが、これまでのところ正しいクエリを実装できませんでした。

ありがとうございます。

注:私は、任意のサイトのルールを破ったか、この記事では、重複今私を聞かせていると私はすぐに

Sample for table

enter image description here

答えて

1

が、これはクライアントが最大のexpencesを与えるこの記事を削除しますた場合:

SELECT distinct max(totaldue) over (partition by customerid),customerid 
FROM salesorderheader 
order by 1 desc 
; 

これは、最も無駄なクライアントnは全:

select sum(totaldue) over (partition by customerid),customerid 
    FROM salesorderheader 
    order by 1 desc 
limit 1 
    ; 
+0

によ、フォーマットについて謝罪

はお返事ありがとうございましたが、あなたのクエリが間違っています。私は同じ顧客のすべての注文の最大値を必要とします。例えば、誰かが120の値を持つ注文が1つあれば、値が50の値を持つ人よりも小さいです。 –

+0

あなたのテーブルは表示されませんが、これはすべきことです - 出力は制限されていません –

+0

まだ結果は間違っています。私は自分のテーブルからスクリーンショットをアップロードしました(無関係の列は避けてください)。私は 'sum()'の使用はクエリ –

1

和によってCUSTOMER_ID

順序(total_dueによって

群salesorderheaderから#topトップ

に合計

としてトップ1 CUSTOMER_ID、和(total_due)を選択)desc; #topトップTから

セレクト*

、内側はsoh.customer_id = t.customeridにsalesorderheaderのSOH

に参加します。

ドロップテーブル#top;私は携帯

+0

Eric私はあなたの実際のクエリの形式は何かを理解できません。一度私はそれが動作するかどうかを確認するでしょう –

+0

私は残念ですが、私はこれはPostgresについての質問だったことを認識していません。構文は異なりますが、アイデアは同じです。顧客IDごとにグループ化し、得意先IDと金額の合計を選択し、結果を金額の合計で1行の注文に制限します(これにより、顧客のIDと金額の合計が最大になります)。値をテンポラリテーブルに追加し、それを顧客IDの受注ヘッダテーブルに戻します。その後、必要に応じて再度クエリを実行できるようにテンポラリテーブルを削除します。 – Eric

+0

あなたが探している他のコメントを読んでいるようですその場合は、テンポラリテーブルに値を設定するクエリのグループ化のレベルを一意に決めるために、別のレベルのグループを追加するだけで、最大の単一注文を持つ顧客IDが得られます。 – Eric