In my journey to learn SQL, I’m writing various queries on an old database of mine, but getting into more complex things, I want to make sure I’m not over engineering this. I have a table Agent, with different agents offering different prices for cities. Multiple agents can serve the same city, each with different prices. I wanted to run a query which would return the total cost of hiring all of the agents for any given city, ordered by the most expensive.
WITH orderedPrices AS (
SELECT SUM(agtFMPrice)
OVER (PARTITION BY agtCity)
AS IX FROM Agent)
SELECT IX
FROM orderedPrices
ORDER BY IX DESC
I found that doing it without the view returned by orderedPrices, it wouldn’t order the prices (I assume because it’s an aggregate function, or whatever they’re called). Did I do this in the best way I could have, or could it be simplified?
Also, if you’re feeling particularly bored, go ahead and give me a new assignment/query to do on this table. I could use the practice.
What you have written in English doesn’t seem to quite match qhat you have written in SQL.
English:
– One record per
City– One field per record, showing the total cost of all associated agents
SQL:
– One record per
Agent– One field per record, showing the total cost of all agents in the same city
If you want the English version, I’d do this…
To assist performance, the table could (should?) also have an Index on
(agtCity)