1

我的 MySQL 查询之一有问题:

SELECT id,Portfolio,Agency,Program,Objective,billion1,value11_12,
    Proportion1,billion,value12_13,Percentage,Difference,
    Diff_Percent,PIT,TOS,Actual_PIT,Actual_TOS,SUM(billion),SUM(Percentage),
    SUM(PIT),SUM(TOS),SUM(Actual_PIT),SUM(Actual_TOS)
FROM budget_table
GROUP BY 'sum(Billion)'
WITH ROLLUP
LIMIT 0,100

查询有效,但我无法获得使用汇总的限制。您可以在BudgetAus查看查询结果

它汇总了所有结果,而不是我现在想要实现的前 100 个结果。我也尝试过仅使用 LIMIT 100 但无法正常工作。我尝试在数据库上的 MySQL 中使用 EXPLAIN(第一次),它说虽然我没有看到任何结果,但查询已执行——但因为我在不确定要查找什么之前从未使用过它。我是编程和使用 WAMP 而不是 CLI 的新手。

我也不确定是从 0 还是 1 开始我的限制?

4

3 回答 3

0

SUM()运算符不能在GROUP BY表达式中使用,SUM()聚合运算符也是如此,因此在 a 中没有任何意义GROUP BY

因此,您应该idGROUP BY.

LIMIT(偏移参数)的第二个参数从 0 开始,而不是 1。

于 2012-11-02T23:30:28.677 回答
0
GROUP BY 'sum(Billion)'

这不会按 Billion 列的每个不同值进行分组。这按单个值分组,即常量字符串字面量'sum(Billion)'。因此,您将获得一组,因为当您使用常量字符串文字作为分组表达式时,所有行都具有相同的值。

当您将表达式放在 GROUP BY 列中时,请去掉引号。

然后你会发现这无论如何都不是一个有效的分组表达式。

于 2012-11-03T00:19:21.977 回答
0

我的儿子(他在附近某个地方,但我不知道他的用户名)决定他今天想为我解决这个问题,并提供了以下解决方案:

//获取主要结果集 $result = mysql_query("SELECT * FROM budget_table ORDER BY Percentage DESC LIMIT 0,100 ");

//为结果集构建一个id数组 $ids = array(); $rows = mysql_num_rows($result);

//获取每一行的id并添加到ids

for($i = 0; $i < $rows; $i++) $ids[] = mysql_result($result, $i, "id");

//将ids加入一个字符串以供IN()使用

$ids_str = implode(",", $ids);

//仅获取上述结果集的 id 的总和

$result2 = mysql_query("SELECT SUM(十亿),SUM(百分比),SUM(PIT),SUM(TOS),SUM(Actual_PIT),SUM(Actual_TOS) FROM budget_table WHERE id IN($ids_str)");

于 2012-11-06T09:05:35.937 回答