[英]Query returns what i want, but wwhen i put into array the array_sum() doesn't add up my values
[英]My query doesn't work when I add a sum() to it?
我正在尝试使用 php、gae 和 bigquery 获取查询以显示结果。 如果我执行通用 select * from table,查询会愉快地运行并在我的应用程序中显示正确的数据,所以我知道我的代码的其他一切都很好。 但是,一旦我尝试在查询中包含 sum(),当我部署应用程序时,我的数据就不再加载。 我不确定我在这里缺少什么,如果有帮助,该列是数字数据类型。 我已经玩过了所有部分,似乎只要我添加 sum() ,所有数据就会从我的应用程序中消失。
...
<?php
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Bigquery::BIGQUERY);
$bigquery = new Google_Service_Bigquery($client);
$projectId = 'projectName';
$query1 = 'SELECT column_1, SUM(column_2) as `trade_price` from [dataset.tableName] group by column_1 order by trade_price desc limit 10';
$request = new Google_Service_Bigquery_QueryRequest();
$str = '';
$request->setQuery($query1);
$response = $bigquery->jobs->query($projectId, $request);
$rows = $response->getRows();
...
感谢任何可以帮助我的人!
编辑:我需要将查询从最大和排序到最小。 我已经测试过在 column_1 上做 sum,这是一个 int,这很好。 所以我开始认为我的问题与 column_2 是数字这一事实有关,但是我的查询在控制台中可以正常工作,所以也许 PHP 和 sum(numeric column) 不能很好地配合使用? 我将如何解决这个问题?
列trade_price
在ORDER BY 子句中应该是无效的,因为它既不包含在聚合函数中也不包含在GROUP BY 子句中。
请尝试以下查询。
SELECT column_1, SUM(column_2) as `trade_price` from [dataset.tableName] group by column_1 order by SUM(column_2) desc limit 10
试试这个!
SELECT column_1, (SELECT SUM(column_2) FROM [dataset.tableName] WHERE Id = tbl.Id) as `trade_price` from [dataset.tableName] tbl group by column_1 order by trade_price desc limit 10
这是您正在使用的查询:
SELECT column_1, SUM(column_2) as `trade_price`
FROM [dataset.tableName]
GROUP BY column_1
ORDER BY trade_price desc;
您指定这可以正常工作:
SELECT column_1, SUM(column_2) as `trade_price`
FROM [dataset.tableName]
GROUP BY column_1 ;
问题是ORDER BY
- 特别是column_1
的值column_1
。 我怀疑这是因为 BigQuery 在单个节点上实现了ORDER BY
; 至少,我知道曾经是这样。
如果您可以过滤结果以删除大部分数据,那么这应该有助于提高性能:例如:
HAVING SUM(column_2) > 1000
或者:
HAVING COUNT(*) >= 10
我什至认为MAX()
窗口函数可以提供帮助。 因此,假设最大值是最大值的 10% 或更多:
SELECT column_1, SUM(column_2) as `trade_price`
FROM [dataset.tableName]
GROUP BY column_1
QUALIFY trade_price >= 0.1 * MAX(trade_price) OVER ()
ORDER BY trade_price desc;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.