Google bigquery Bigquery-选择不在GROUPBY子句中分组的列

Google bigquery Bigquery-选择不在GROUPBY子句中分组的列,google-bigquery,Google Bigquery,我有一个包含google analytics数据的day wise表,该表根据设备类别(台式机/手机/平板电脑)和用户类型(新用户/返回用户)进行划分 我的要求是,查询当月表现最好的产品,只知道设备和用户的类型。我不想根据设备类别、用户类型对它们进行分组 当从我的查询中排除它们时,is给出了一个错误提示-“查询错误:选择列表表达式引用列设备\u类别,该类别在[3:21]处既没有分组也没有聚合”” 不起作用的查询(这是我的要求) 有效的查询 SELECT month, year,

我有一个包含google analytics数据的day wise表,该表根据设备类别(台式机/手机/平板电脑)和用户类型(新用户/返回用户)进行划分

我的要求是,查询当月表现最好的产品,只知道设备和用户的类型。我不想根据设备类别、用户类型对它们进行分组

当从我的查询中排除它们时,is给出了一个错误提示-“查询错误:选择列表表达式引用列设备\u类别,该类别在[3:21]处既没有分组也没有聚合”

不起作用的查询(这是我的要求)

有效的查询

SELECT 
  month, 
  year, 
  device_category, 
  user_type, 
  product_name, 
  round(sum(item_revenue),2) as item_revenue 
FROM 
  `ProjectName.DatasetName.GA_REPORT_3_*` 
where 
  _table_suffix between '20201101' and '20210131' 
  and channel_grouping = 'Organic Search' 
group by 
  month, 
  year, 
  channel_grouping, 
  product_name, 
  device_category, 
  user_type 
order by 
  item_revenue desc;
样本数据

我知道在常规的SQL工作台中,我们可以在SQL中选择一个列,而不是GROUPBY子句,但这对于我在Bigquery上的问题不起作用


您能帮我解决这个问题吗。

您可以使用子查询来实现这一点:

SELECT 
  x.month, 
  x.year, 
  x.device_category, 
  x.user_type, 
  x.product_name, 
  ROUND(SUM(x.item_revenue),2) as item_revenue 
FROM 
 (SELECT
    month,
    year,
    device_category,
    user_type,
    product_name,
    item_revenue
  FROM `ProjectName.DatasetName.GA_REPORT_3_*` 
  WHERE _table_suffix BETWEEN '20201101' and '20210131' 
  AND channel_grouping = 'Organic Search'
 ) x 
GROUP BY 
  x.month, 
  x.year,  
  x.product_name, 
  x.device_category, 
  x.user_type 
ORDER BY ROUND(SUM(x.item_revenue),2) DESC;

从技术上讲,您可以使用或
MAX
MIN
封装
device\u类别
user\u类型

 SELECT
  month, 
  year, 
  ANY_VALUE(device_category), 
  ANY_VALUE(user_type), 
  product_name, 
  round(sum(item_revenue),2) as item_revenue 
FROM 
  `ProjectName.DatasetName.GA_REPORT_3_*` 
where 
  _table_suffix between '20201101' and '20210131' 
  and channel_grouping = 'Organic Search' 
group by 
  month, 
  year, 
  channel_grouping, 
  product_name 
order by 
  item_revenue desc;

示例数据以及设置查询格式以便其他人可以读取这些数据在这里非常有用。如果分组中不包括
用户类型
设备类别
,这意味着您的计算
总和(项目收入)
将“超过其顶部”。也就是说,在
总和(项目收入)
计算中,它将包括多个
用户类型
设备类别
。所以,如果您选择它们,但不按它们分组,您希望在这些列中看到哪些值?每行中都会有多个值。。。我建议你通过练习尝试创建一个包含你想要的结果的电子表格,然后你就会明白我的意思。
 SELECT
  month, 
  year, 
  ANY_VALUE(device_category), 
  ANY_VALUE(user_type), 
  product_name, 
  round(sum(item_revenue),2) as item_revenue 
FROM 
  `ProjectName.DatasetName.GA_REPORT_3_*` 
where 
  _table_suffix between '20201101' and '20210131' 
  and channel_grouping = 'Organic Search' 
group by 
  month, 
  year, 
  channel_grouping, 
  product_name 
order by 
  item_revenue desc;