首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按表现最好的国家和地区对结果进行排序

问按表现最好的国家和地区对结果进行排序
EN

Database Administration用户
提问于 2018-08-06 18:33:42
回答 1查看 240关注 0票数 2

我想看看哪个国家和地区的销售表现最好。

我有以下order表:

代码语言:javascript
复制
| order_id | amount |
|----------|--------|
| 100      | 1000   |
| 101      | 250    |
| 102      | 120    |
| 103      | 500    |
| 104      | 25     |
| 105      | 2000   |
| 106      | 300    |

和order_address表:

代码语言:javascript
复制
| order_id | country | region |
|----------|---------|--------|
| 100      | US      | CA     |
| 101      | US      | LA     |
| 102      | UK      | GL     |
| 103      | UK      | GL     |
| 104      | UK      | GB     |
| 105      | CA      | OT     |
| 106      | AU      | QL     |

我想按国家和地区获得订单数据,并按表现最好的国家(地区)排序。

代码语言:javascript
复制
SELECT 
    oa.country, oa.region, SUM(o.amount) AS 'total_sales'
FROM order o
INNER JOIN order_address oa ON o.order_id = oa.order_id
GROUP BY oa.country, oa.region
ORDER BY SUM(o.amount) DESC, oa.country, oa.region 

但这并不像预期的那样起作用,因为它破坏了国家顺序。只有在所有高绩效国家的区域都得到展示的情况下,其他国家的成果才会随之出现。

实际上,以下是所期望的结果:

代码语言:javascript
复制
| country | region | total_sales |
|---------|--------|-------------|
| CA      | OT     | 2000        |
| US      | CA     | 1000        |
| US      | LA     | 250         |
| UK      | GL     | 620         |
| UK      | GB     | 25          |
| AU      | QL     | 300         |
EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-08-06 21:16:19

我假设您希望按(按国家的总数)、然后按国家(在此级别上为平手的情况)、然后(按区域的总数)、然后按区域(如果需要的话,作为区域级别的平局者)进行排序。

下面是调整后的SQL:

代码语言:javascript
复制
SELECT 
    oa.country, oa.region, SUM(o.amount) AS 'total_sales'
FROM `order` o
INNER JOIN order_address oa ON o.order_id = oa.order_id
INNER JOIN (SELECT oa1.country, SUM(o1.amount) AS ctry_sales
              FROM order_address oa1
                     INNER JOIN `order` o1 ON o1.order_id = oa1.order_id
             GROUP BY oa1.country
           ) c ON oa.country = c.country
GROUP BY oa.country, c.ctry_sales, oa.region
ORDER BY c.ctry_sales DESC, oa.country, SUM(o.amount) DESC, oa.region

我们在标记为c的子查询中确定每个国家的总数。然后,我们将它加入到您已经拥有的两个表中,并将每个国家的总数添加为ORDER BY中的第一个排序条件。当然后移动国家之前的总销售额按地区,以确保我们保持在同一个国家的条目在一起,即使两个国家有相同的每个国家的总数。

结果(如您在本SQLFiddle中所看到的)是您所要求的:

代码语言:javascript
复制
CA  OT  2000
US  CA  1000
US  LA  250
UK  GL  620
UK  GB  25
AU  QL  300
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/214214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档