使用CAST和确定小数时出现大查询错误



我已经将一个大查询项目链接到我的谷歌广告账户。其中,我们有一个campaignBasicStats表。

我想把我的谷歌广告账户中的活动成本拉到一个大的查询工作区中,以应用一些额外的逻辑。

成本列显示为整数,描述如下:INTEGER NULLABLE
在此期间您的每次点击成本(CPC(和每千次点击成本(CPM(的总和。值可以是以下值之一:a(以微米为单位的货币金额;auto:x";或";自动;如果该字段是出价并且AdWords通过所选择的出价策略自动设置出价--"如果此字段是一个出价,而没有出价应用于该行。

如果我查询该表,则成本返回如下值:例如:2590000965145.0

在谷歌广告中,这些活动的两项成本分别为25.90英镑和96.51英镑

所以我在我的大查询工作区中有这段代码。

SELECT CAST(Cost AS FLOAT64)
FROM `db_table`
WHERE COST > 0
LIMIT 1000

该列返回以下数字:

2590000.0
965145.0

然而,由于我需要数字是一种货币,例如,第一个返回2590000.0应该是25.90,第二个应该是96.51

我把我的代码改成了这个:

SELECT CAST(Cost AS FLOAT64(4,2))
FROM `db_table`
WHERE COST > 0
LIMIT 1000

现在我得到这个错误:

FLOAT64不支持[1:28]的类型参数

我缺少什么吗?如何转换为小数点并指定BQ中小数点的位置?

谢谢,

您似乎正在使用谷歌广告数据传输操作,如此处所述。

在这种情况下,重要的是要注意p_CampaignBasicStats:中的"成本说明"列

每次点击的成本(CPC(和每千次印象的成本之和(CPM(在此期间的成本。价值可以是以下其中之一:a(一笔钱以micros为单位的量,b(";auto:x";或";自动;如果此字段是投标,并且AdWords通过选择的出价自动设置出价策略,或c("--"如果此字段是投标,并且没有投标适用于一行

1微是基本货币的100万个月。因此,我们需要将这个量转换为:cost / 1000000

然后,我们只需要ROUND来获得合适的单元如果你喜欢总是四舍五入,请在这里查看我关于正确方法的答案

首先,我们将用您给出的示例值设置一个示例表:

CREATE TEMP TABLE ex_db_table ( Cost INTEGER );
INSERT INTO
ex_db_table
VALUES
( 2590000 );
INSERT INTO
ex_db_table
VALUES
( 965145 );

然后我们将在您的首选单位中选择数据:

SELECT
ROUND(Cost / 1000000, 2) as currency_cost
FROM
ex_db_table;

值得注意的是,你的问题中的数学是不正确的,因为你的成本示例的实际值等于2.59和0.97。

最新更新