在SQL中有没有更简洁的方法来运行这个查询?

Is there a more concise way to run this query in SQL?

我正在使用一组示例数据学习 MySQL 中的子查询和聚合。我有两个 table,ordersagents。这是每个 table:

的一部分

订单:

+---------+------------+----------------+------------+-----------+------------+-----------------+
| ORD_NUM | ORD_AMOUNT | ADVANCE_AMOUNT | ORD_DATE   | CUST_CODE | AGENT_CODE | ORD_DESCRIPTION |
+---------+------------+----------------+------------+-----------+------------+-----------------+
|  200100 |    1000.00 |         600.00 | 2008-01-08 | C00015    | A003       | SOD             |
|  200110 |    3000.00 |         500.00 | 2008-04-15 | C00019    | A010       | SOD             |
|  200107 |    4500.00 |         900.00 | 2008-08-30 | C00007    | A010       | SOD             |
|  200112 |    2000.00 |         400.00 | 2008-05-30 | C00016    | A007       | SOD             |
|  200113 |    4000.00 |         600.00 | 2008-06-10 | C00022    | A002       | SOD             |
|  200102 |    2000.00 |         300.00 | 2008-05-25 | C00012    | A012       | SOD             |
|  200114 |    3500.00 |        2000.00 | 2008-08-15 | C00002    | A008       | SOD             |
|  200122 |    2500.00 |         400.00 | 2008-09-16 | C00003    | A004       | SOD             |
|  200118 |     500.00 |         100.00 | 2008-07-20 | C00023    | A006       | SOD             |
|  200119 |    4000.00 |         700.00 | 2008-09-16 | C00007    | A010       | SOD             |
+---------+------------+----------------+------------+-----------+------------+-----------------+

代理人:

+------------+------------+--------------+------------+--------------+-----------+
| AGENT_CODE | AGENT_NAME | WORKING_AREA | COMMISSION | PHONE_NO     | COUNTRY   |
+------------+------------+--------------+------------+--------------+-----------+
| A007       | Ramasundar | Bangalore    |       0.15 | 077-25814763 | India     |
| A003       | Alex       | London       |       0.13 | 075-12458969 | U.K.      |
| A008       | Alford     | New York     |       0.12 | 044-25874365 | U.S.      |
| A011       | Ravi Kumar | Bangalore    |       0.15 | 077-45625874 | India     |
| A010       | Santakumar | Chennai      |       0.14 | 007-22388644 | India     |
| A012       | Lucida     | San Jose     |       0.12 | 044-52981425 | U.S.      |
| A005       | Anderson   | Brisbane     |       0.13 | 045-21447739 | Australia |
| A001       | Subbarao   | Bangalore    |       0.14 | 077-12346674 | India     |
| A002       | Mukesh     | Mumbai       |       0.11 | 029-12358964 | India     |
| A006       | McDen      | London       |       0.15 | 078-22255588 | U.K.      |
| A004       | Ivan       | Toronto      |       0.15 | 008-22544166 | Canada    |
| A009       | Benjamin   | Hampshire    |       0.11 | 008-22536178 | U.K.      |
+------------+------------+--------------+------------+--------------+-----------+

我想回答的问题是:每个代理所在国家的订单总额是多少? (即 COUNTRY 为印度、U.K、澳大利亚等的代理商的总和 ORD_AMOUNT。)

为此,我首先 运行 查询以将 ORD_AMOUNT 由代理分组:

SELECT o.AGENT_CODE Agent, SUM(o.ORD_AMOUNT) Total, a.COUNTRY
FROM orders o INNER JOIN agents a USING(AGENT_CODE)
GROUP BY Agent ORDER BY Total DESC;

成功生成了这个输出:

+--------+----------+-----------+
| Agent  | Total    | COUNTRY   |
+--------+----------+-----------+
| A010   | 34000.00 | India     |
| A002   | 25400.00 | India     |
| A004   | 19000.00 | Canada    |
| A005   | 15400.00 | Australia |
| A008   | 15000.00 | U.S.      |
| A011   | 10000.00 | India     |
| A003   |  7000.00 | U.K.      |
| A006   |  6000.00 | U.K.      |
| A012   |  5800.00 | U.S.      |
| A007   |  5000.00 | India     |
| A001   |  1600.00 | India     |
| A009   |  1000.00 | U.K.      |
+--------+----------+-----------+

然后,我将其嵌套为子查询以获得我想要的结果:

SELECT oa.Country, SUM(oa.Total) `Country Total` FROM
(SELECT o.AGENT_CODE Agent, SUM(o.ORD_AMOUNT) Total, a.COUNTRY FROM orders o 
INNER JOIN agents a USING(AGENT_CODE) GROUP BY Agent) oa
GROUP BY Country ORDER BY `Country Total` DESC;

结果是:

+-----------+---------------+
| Country   | Country Total |
+-----------+---------------+
| India     |      76000.00 |
| U.S.      |      20800.00 |
| Canada    |      19000.00 |
| Australia |      15400.00 |
| U.K.      |      14000.00 |
+-----------+---------------+

我对这个结果很满意:这是我所期望的,并且实现了我的 objective。

我的问题是:我能做些什么来使这个查询更整洁或更简洁吗?

感觉查询很长,我不确定我是否没有利用更简单或更容易的方法。

一级聚合就足够了:

select a.country, sum(o.ord_amount) total 
from orders o 
inner join agents a using(agent_code)
group by a.country 
order by total desc;