我遇到了一个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开始限制?
答案 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)”) ;