如何解决如何添加基于另一列的数据的列
我有一个看起来像这样的BQ表:
并且我想添加一列,以根据同一张发票下的行数对shipping_handling进行划分,在这种情况下,由于发票J513183下有5个条目,因此它将为461.71 / 5 = 92.34
如下所示:
尝试添加此代码 “ shipping_handling / count(invoice)as shipping”) ,但此方法无效。我希望有人能帮助我在此Google大查询sql上找到解决方案
解决方法
以下是用于BigQuery标准SQL
#standardSQL
SELECT *,ROUND(shipping_handling / (COUNT(*) OVER(PARTITION BY invoice)),2) AS shipping
FROM `project.dataset.table`
,
一种可能的解决方案是创建具有组数的临时表,然后在查询中使用它
-- DROP TABLE IF EXISTS
IF OBJECT_ID(N'tempdb..#tmpInvoice') IS NOT NULL
BEGIN
DROP TABLE #tmpInvoice
END
-- GROUP INVOICES AND INSERT INTO TEMP TABLE
SELECT invoice as invoiceId,COUNT(invoice) invoiceCount
INTO #tmpInvoice
FROM BQ GROUP BY invoice
-- GET SHIPPING WITH ADDITIONAL SELECT
SELECT invoice_date,invoice,description,shipping_handling,avg_line_total,cast((shipping_handling/(SELECT invoiceCount from #tmpInvoice where invoiceId = invoice)) as numeric(10,2)) Shipping
FROM BQ
-- GET SHIPPING WITH INNER JOIN
SELECT bq.invoice_date,bq.invoice,bq.description,bq.shipping_handling,bq.avg_line_total,cast((bq.shipping_handling/ti.invoiceCount) as numeric(10,2)) Shipping
FROM BQ bq
INNER JOIN #tmpInvoice ti on bq.invoice = ti.invoiceId
,
您可以使用窗口功能:
select invoice_date,shipping_handling / count(*) partition by (invoice) as shipping
from the_table;
根据您的DBMS,您可能需要将除法中的值之一转换为数字数据类型,否则它可能使用不产生十进制数字的整数除法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。