【问题标题】:How to find the highest sales in each year in BigQuery?如何在 BigQuery 中找到每年的最高销售额?
【发布时间】:2018-04-06 10:59:46
【问题描述】:

下表包含电话名称、售出物品数量、月份和年份。

with table1 as(
select "iphone" as phone,3 as sold_out,"Jan" as month,2015 as year union all
select "iphone",10,"Feb",2015 union all
select "samsung",4,"March",2015 union all
select "Lava",14,"June",2016 union all
select "Lenova",8,"July",2016 union all
select "Lenova",10,"Sep",2016  union all
select "Motorola",8,"Jan",2017 union all
select "Nokia",7,"Jan",2017 union all
select "Nokia",3,"Feb",2017
)

我会得到这样的答案

-----------------------------
year      Phone      sales
-----------------------------
2015      iphone     13
2016      lenova     18
2017      Nokia      10
-----------------------------

我没试过,因为老实说我不知道​​

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 BigQuery Standrad SQL

    #standardSQL
    SELECT 
      year, 
      ARRAY_AGG(STRUCT(phone, sales) ORDER BY sales DESC LIMIT 1)[OFFSET(0)].*
    FROM (
      SELECT year, phone, SUM(sold_out) sales
      FROM `project.dataset.table1`
      GROUP BY year, phone
    )
    GROUP BY year
    

    您可以使用来自您问题的虚拟数据进行测试/播放,如下所示

    #standardSQL
    WITH `project.dataset.table1` AS(
      SELECT "iphone" AS phone,3 AS sold_out,"Jan" AS month,2015 AS year UNION ALL
      SELECT "iphone",10,"Feb",2015 UNION ALL
      SELECT "samsung",4,"March",2015 UNION ALL
      SELECT "Lava",14,"June",2016 UNION ALL
      SELECT "Lenova",8,"July",2016 UNION ALL
      SELECT "Lenova",10,"Sep",2016  UNION ALL
      SELECT "Motorola",8,"Jan",2017 UNION ALL
      SELECT "Nokia",7,"Jan",2017 UNION ALL
      SELECT "Nokia",3,"Feb",2017
    )
    SELECT 
      year, 
      ARRAY_AGG(STRUCT(phone, sales) ORDER BY sales DESC LIMIT 1)[OFFSET(0)].*
    FROM (
      SELECT year, phone, SUM(sold_out) sales
      FROM `project.dataset.table1`
      GROUP BY year, phone
    )
    GROUP BY year
    ORDER BY year
    

    结果

    Row year    phone   sales    
    1   2015    iphone  13   
    2   2016    Lenova  18   
    3   2017    Nokia   10   
    

    【讨论】:

      【解决方案2】:
      SELECT year AS year, phone AS Phone, sum(sold_out) AS sales
      FROM table1
      GROUP BY year, Phone
      HAVING COUNT(Phone)=2
      ORDER BY year ASC
      ;
      

      这将在标准 SQL 中为您提供所需的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多