【问题标题】:rollup with limit?有限制的汇总?
【发布时间】:2012-11-02 23:14:55
【问题描述】:

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

【问题讨论】:

  • 我认为它在网站上的反映很差,并且当人们对合法问题得到如此不成熟的回答时,这会让新编码人员感到沮丧。我想我对 Stack Overflow 的期望会更好。
  • 当你发布你的问题和代码时,代码没有显示为“代码”,所以,它不是可读的。这就是我的 commnet 的意思。
  • 真的,我怀疑这对你是否能够提供帮助会有很大的不同。

标签: mysql limit rollup


【解决方案1】:
GROUP BY 'sum(Billion)'

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

将表达式放入 GROUP BY 列时,请去掉引号。

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

【讨论】:

  • 谢谢比尔,我只是在尝试不同的方法来查看是否可以使查询正常工作,但没有意识到您不能同时使用 GROUP BY 和 LIMIT。
  • 我认为另一个问题是聚合函数在应用 LIMIT 之前执行,这就是为什么即使没有 GROUP BY 修饰符它也无法工作的原因。
  • 我觉得你没看懂我上面写的内容。
  • 好的,比尔。我不确定我是否理解你的解释。我在网站的一些 GROUP BY 语句中使用了 sum 函数,它按预期工作。
  • 我试图解释我的查询没有按预期工作的原因是因为在 sum 函数执行后应用了 LIMIT。
【解决方案2】:

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

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

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

【讨论】:

  • LIMITs start at 1, not 0 --- 嗯,没有
  • 你是对的。 LIMIT 1LIMIT 1,0 意思相同。 LIMIT 0 不返回任何记录。我已经澄清了我的答案。谢谢!
  • 感谢人们的回答,我因个人紧急情况被叫走,但今天终于回到了这个问题。这个查询的基本问题是我没有使用像所有其他查询一样的变量来定位 ROLLUP 的结果。我使用的是 LIMIT。
【解决方案3】:

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

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

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

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

for($i = 0; $i

//将ids连接成一个字符串,用于IN()

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

//只获取上面结果集的id的总和

$result2 = mysql_query("SELECT SUM(billion),SUM(Percentage),SUM(PIT),SUM(TOS),SUM(Actual_PIT),SUM(Actual_TOS) FROM budget_table WHERE id IN($ids_str)") ;

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2019-06-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2020-10-09
    相关资源
    最近更新 更多