私はSQLを学ぶ旅の中で、私の古いデータベースにさまざまな質問を書いていますが、もっと複雑なものに取り組んでいます。私はテーブルエージェントを持っています。複数のエージェントが同じ都市にサービスを提供することができ、それぞれ異なる価格で提供されます。私は、最も高価な順序で任意の特定の都市のすべてのエージェントを雇うの総コストを返すクエリを実行したいと思います。このSELECTとORDER BYのクエリは、私が実行した最も効率的な方法ですか?
WITH orderedPrices AS (
SELECT SUM(agtFMPrice)
OVER (PARTITION BY agtCity)
AS IX FROM Agent)
SELECT IX
FROM orderedPrices
ORDER BY IX DESC
私はorderedPricesによって返されたビューなしでそれをやって、それが(それは集約関数だ、またはそれらが呼び出されているものは何でもので、私は仮定)の価格を注文しないことがわかりました。私はこれを最善の方法でやったのか、それとも単純化できるのか?
また、特に退屈だと感じたら、この表で行う新しい割り当て/クエリを私に教えてください。私はその練習を使うことができた。
おっと上のインデックスを持つことができ、それが詳細な回答、感謝だ、それは本当に私の間違いを指摘しています。私はまだSQLの把握はまだしていないようだ。だから、私のパーティションビットが原因だと思われる? – cost
また、新しいクエリのおかげで、Nullコスト$ 14.50を学んだことがあります。 – cost
'GROUP BY'は、複数のソース行のグループをグループごとに1行に集約します。次に、 'MIN/MAX/SUM/etc'を使って、各グループの複数行の単一集約結果を計算することができます。 'OVER(PARTITION BY)'は、集計を行を集約することなく指定することを可能にします。複数のソース行のすべてを保持しながら、単一の集計結果を複数のソース行に適用します。 – MatBailie