累积有限制?

时间:2012-11-02 23:14:56

标签: mysql limit rollup

我遇到了一个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开始限制?

3 个答案:

答案 0 :(得分:0)

SUM()运算符不能在GROUP BY表达式中使用,因为SUM()是一个聚合运算符,因此在GROUP BY

中没有任何意义

因此,您应该id使用GROUP BY或其他字段。

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

答案 1 :(得分:0)

GROUP BY 'sum(Billion)'

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

将表达式放在GROUP BY列中时取消引号。

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

答案 2 :(得分:0)

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

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

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

//获取每行的ID并添加到ID

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

//将id加入一个字符串,以便与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)”) ;