1

SQLを学ぶ旅の中で、私は古いデータベースにさまざまなクエリを書いていますが、もっと複雑なことに取り掛かるときは、これを過剰に設計していないことを確認したいと思います。私はテーブルエージェントを持っており、さまざまなエージェントが都市にさまざまな価格を提供しています。複数のエージェントが同じ都市にサービスを提供でき、それぞれの価格は異なります。特定の都市のすべてのエージェントを雇うための総コストを、最も高い順に並べたクエリを実行したかったのです。

WITH orderedPrices AS (
    SELECT SUM(agtFMPrice) 
    OVER (PARTITION BY agtCity) 
    AS IX FROM Agent)
SELECT IX 
FROM orderedPrices 
ORDER BY IX DESC

私は、orderedPricesによって返されたビューなしでそれを行うと、価格を注文しないことがわかりました(これは集計関数、またはそれらが呼び出されるものであるためだと思います)。私はこれを私が持つことができる最善の方法で行いましたか、それとも単純化できましたか?

また、特に退屈している場合は、このテーブルで行う新しい割り当て/クエリを教えてください。私は練習を使うことができました。

4

1 に答える 1

1

あなたが英語で書いたものは、あなたが SQL で書いたものと完全には一致していないようです。

英語:
- 1 レコードにつき 1City
つのフィールド - 1 レコードにつき 1 つのフィールド、関連するすべてのエージェントの合計コストを表示

SQL:
- 1 レコードにつき 1 Agent
- 1 レコードにつき 1 フィールド、同じ都市のすべてのエージェントの合計コストを表示

 AgentID | agtCity | agtFMPrice
---------+---------+------------
    1    |    1    |     10
    2    |    1    |     20
    3    |    2    |     30
    4    |    2    |     10
    5    |    2    |     25


 Results of SQL version           Results of English version
------------------------         ----------------------------
            30                                30
            30                                65
            65
            65
            65

英語版が欲しいなら、私はこうします...

SELECT
  agtCity,
  SUM(agtFMPrice) AS IX
FROM
  Agent
GROUP BY
  agtCity
ORDER BY
  SUM(agtFMPrice) DESC

パフォーマンスを向上させるために、テーブルにはインデックスも含めることができます (すべきですか?)(agtCity)

于 2012-04-10T10:35:52.737 に答える