Sql 如何在一个月内按国家获得前三名产品销售

Sql 如何在一个月内按国家获得前三名产品销售,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,以下是我们每月在一个国家获得前三名产品销售额所需的数据库: USA Lenevo 1/1/2017 USA Toshiba 1/1/2017 USA Dell 1/2/2017 USA Asus 1/2/2017 USA Lenevo 1/1/2017 USA Toshiba 1/1/2017 USA Dell 1/2/2017 USA Lenevo 1/1/2017 USA Toshiba 1/1/2017 USA Dell 1/2/2017 Banglades

以下是我们每月在一个国家获得前三名产品销售额所需的数据库:

USA Lenevo  1/1/2017
USA Toshiba 1/1/2017
USA Dell    1/2/2017
USA Asus    1/2/2017
USA Lenevo  1/1/2017
USA Toshiba 1/1/2017
USA Dell    1/2/2017
USA Lenevo  1/1/2017
USA Toshiba 1/1/2017
USA Dell    1/2/2017

Bangladesh  Lenevo  1/1/2017
Bangladesh  Toshiba 1/1/2017
Bangladesh  Dell    1/2/2017
Bangladesh  Lenevo  1/1/2017
Bangladesh  Toshiba 1/1/2017
Bangladesh  Dell    1/2/2017
Bangladesh  Asus    1/2/2017

India   Lenevo  1/1/2017
India   Toshiba 1/1/2017
India   Dell    1/2/2017
India   Lenevo  1/1/2017
India   Toshiba 1/1/2017
India   Dell    1/2/2017        
India   Asus    1/2/2017

Thailand    Lenevo  1/1/2017
Thailand    Toshiba 1/1/2017
Thailand    Dell    1/2/2017
India           Asus    1/2/2017
Thailand    Lenevo  1/1/2017
Thailand    Toshiba 1/1/2017
Thailand    Dell    1/2/2017
Thailand    Lenevo  1/1/2017
Thailand    Toshiba 1/1/2017

USA Lenevo  2/1/2017
USA Toshiba 2/1/2017
USA Dell    2/2/2017
USA Lenevo  2/5/2017
USA Toshiba 2/6/2017
USA Dell    2/9/2017
USA Lenevo  2/5/2017

Bangladesh  Lenevo  2/1/2017
Bangladesh  Toshiba 2/1/2017
Bangladesh  Dell    2/2/2017
Bangladesh  Lenevo  2/1/2017
Bangladesh  Toshiba 2/1/2017
Bangladesh  Dell    2/2/2017
Bangladesh  Lenevo  2/3/2017

India   Lenevo  2/1/2017
India   Toshiba 2/1/2017
India   Dell    2/2/2017
India   Asus    2/2/2017


Thailand    Lenevo  2/1/2017
Thailand    Toshiba 2/1/2017
Thailand    Dell    2/2/2017
Thailand    Asus    2/2/2017
Thailand    Lenevo  2/1/2017
Thailand    Toshiba 2/1/2017
Thailand    Dell    2/2/2017
Thailand    Lenevo  2/1/2017
Thailand    Toshiba 2/1/2017

只要使用DB版本12c,就可以很容易地使用fetch first子句列出top-N查询。最后按月份、国家、品牌顺序对栏目进行分组,并应用分组功能

重要的窍门是考虑最小值有序列的多重存在概率的情况。i、 e.您限制为3个,但第5列第4列的品牌数量相等。在这种情况下,考虑使用与领带子句包含所有最小相等的事件:

select to_char(sale_date,'yyyymm') "monthOfYear", country, brand, count(1) cnt
  from sales
 group by to_char(sale_date,'yyyymm'), country, brand
 order by count(1) desc
 fetch first 3 rows with ties;
假设您有一个包含以下列的销售表:

SQL> desc sales
     COUNTRY   VARCHAR2(35)
     BRAND     VARCHAR2(35)
     SALE_DATE DATE

你有什么问题吗?注意:Oracle的哪个版本?1发布家庭作业问题是可以的,但你必须展示你尝试了什么,以及你遇到了什么困难。2关于日期,当你在没有解释的情况下写下2017年1月2日之类的东西时,你是在问我们这是1月2日还是2月1日。我们不能——我们不是读心术的人。当你谈论前三名时,领带可能是第一名:六次销售,第二名:五次销售,第三名:两种不同的产品,每种产品有四次销售。在这种情况下,必须指定所需的结果。例如:如果有关联,则显示第三个关联的所有产品。