繁体   English   中英

如何将 AVG 计算为 2 个表之间的左连接?

[英]How to calculate AVG into left join between 2 tables?

我必须计算 bigquery 的平均总收入(关键是 item_id)。

SELECT
  t0.order_create_date AS day,
  t0.site_country AS country,
  p0.product_brand AS brand,
  p0.product_gender AS gender,
  p0.product_department AS department,
  t0.item_qty AS items_sold,
  t0.item_sale_price AS gross_revenue,
  t0.item_net_price AS net_revenue,
FROM
  `transactions` t0
LEFT JOIN
  `products` p0
ON
  t0.item_id = p0.item_id
ORDER BY
  country,
  day ASC

我试过这个:

SELECT
  t0.order_create_date AS day,
  t0.site_country AS country,
  p0.product_brand AS brand,
  p0.product_gender AS gender,
  p0.product_department AS department,
  t0.item_qty AS items_sold,
  t0.item_sale_price AS gross_revenue,
  AVG(t0.item_sale_price) AS average_value,

  t0.item_net_price AS net_revenue,
FROM
  `transactions` t0
LEFT JOIN
  `products` p0
ON
  t0.item_id = p0.item_id
ORDER BY
  country,
  day ASC

双查询结果:

SELECT list expression references t0.order_create_date which is neither grouped nor aggregated at [2:3]

问题是您没有聚合或按所有其他列进行聚合,除了average_value之一。 在这里,您可以阅读有关 Group By 的更多信息。

从您正在创建的列的名称中,我想您还希望获得其他信息,例如总收入和净收入。 您也必须在它们上使用一些聚合 function ,否则错误将继续。

像下面这样的东西应该可以工作:

SELECT
  t0.order_create_date AS day,
  t0.site_country AS country,
  p0.product_brand AS brand,
  p0.product_gender AS gender,
  p0.product_department AS department,
  sum(t0.item_qty) AS items_sold,
  sum(t0.item_sale_price) AS gross_revenue,
  AVG(t0.item_sale_price) AS average_value,
  sum(t0.item_net_price) AS net_revenue,

FROM
  transactions t0
LEFT JOIN
  products p0
ON
  t0.item_id = p0.item_id

GROUP BY
  day,
  country,
  brand,
  gender,
  department

ORDER BY
  country,
  day ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM