如何在BigQuery中找到每年最高的销售额?

时间:2018-04-06 10:59:46

标签: google-bigquery

下表包含电话名称,已售商品数量,月份和年份。

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
-----------------------------

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

2 个答案:

答案 0 :(得分:3)

以下是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   

答案 1 :(得分:0)

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中。