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 写的 qhat 不太匹配。

英语:
-City
每条记录 - 每条记录一个字段,显示所有关联代理的总成本

SQL:
-Agent
每条记录 - 每条记录一个字段,显示同一城市所有代理商的总费用

 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 回答