繁体   English   中英

当我向其中添加 sum() 时,我的查询不起作用?

[英]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.

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