我的一个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开始?
发布于 2012-11-03 07:30:29
不能在GROUP BY表达式中使用SUM()运算符,因为SUM()是聚合运算符,因此在GROUP BY中没有意义
因此,对于GROUP BY,您应该使用id或其他字段。
LIMIT的第二个参数(偏移量参数)从0开始,而不是1。
发布于 2012-11-03 08:19:22
GROUP BY 'sum(Billion)'这不会按十亿列的每个不同值进行分组。它按单个值进行分组,即常量字符串文字'sum(Billion)'。因此,您将获得一个组,因为当您使用常量字符串文字作为分组表达式时,所有行都具有相同的值。
在GROUP BY列中放置表达式时,去掉引号。
然后你会发现这不是一个有效的分组表达式。
发布于 2012-11-06 17:05:36
我的儿子(他就在附近,但我不知道他的用户名)决定今天要为我解决这个问题,并提供了以下解决方案:
//获取主结果集$result = mysql_query("SELECT * FROM budget_table ORDER BY Percentage DESC LIMIT 0,100 ");
//构建结果集ids数组$ids = array();$rows = mysql_num_rows($result);
//获取每一行的id并添加到id中
对于( $i = 0;$i< $rows;$i++) $ids[] = mysql_result($result,$i,"id");
//将IN连接成一个字符串,以便与IN()一起使用
$ids_str =$ids_str( ",“,$ids);
//只获取上面结果集ids的和
$result2 = mysql_query("SELECT SUM(十亿),SUM(百分比),SUM(PIT),SUM(TOS),SUM(Actual_PIT),SUM(Actual_TOS) FROM budget_table WHERE id IN($ids_str)");
https://stackoverflow.com/questions/13204320
复制相似问题