【问题标题】:Sqlite aggregate max(sum()) error in androidandroid中的Sqlite聚合max(sum())错误
【发布时间】:2014-09-22 15:37:45
【问题描述】:

我正在尝试执行以下查询,但我误用了聚合函数 sum()

查询

select max(sum(entry.amount)),category.name from entry,category where entry.amount<0 and entry.cid=category.cid group by category.name  

LogCat 输出

android.database.sqlite.SQLiteException: misuse of aggregate function sum() (code 1): , while  compiling: select sum(entry.amount),category.name from entry,category where entry.amount<0 and  entry.cid=category.cid group by category.name 09-22 20:20:18.626: E/AndroidRuntime(4093):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

有什么建议吗? 问候, 兄弟

【问题讨论】:

  • 对求和字段使用 别名(即:... Sum(Entry.Amount) AS Total, ...)。 AS 是可选的(仅出于可读性目的)。
  • 总和已经在聚合列 entry.amount 的值,因此您不能在单个查询中在此之上使用另一个聚合函数。
  • 我想要每个类别的总和聚合函数给出的最大值。条目表有列金额和 cid,它们存储在特定类别上花费的金额,例如体育、食品、娱乐。Cid 将特定类别的 ID 存储在类别中table.Category 表只有 cid 和 name 两个字段。如果您发布有助于我获得所需结果的查询,这将很有帮助。谢谢你:)
  • 如果您发布示例数据和所需结果会很有帮助。

标签: android sqlite misuse


【解决方案1】:

您不能在单个查询中两次聚合值,但这可以通过子查询来解决。

试试:

select max(amountsum)
from (select sum(entry.amount) as amountsum
      from entry,category
      where entry.amount<0
        and entry.cid=category.cid
      group by category.name)

注意事项:

  • 未经测试

  • 不确定查询的逻辑:您正在聚合值以便只保留一个条目,因此查询 category.name 没有意义

【讨论】:

  • 对单行子查询使用max() 没有意义。
  • @personne3000 感谢您的查询。我已修改您的查询以获得所需的结果。下面是我修改后的查询,我从中得到了我想要达到的结果。 'select max(amountsum),catid from (select sum(entry.amount)as amountsum,entry.cid as catid from entry,category where entry.amount
  • @CL。由于 group by 子句,子查询不返回单行。我不确定您的实际意思。
  • 对不起,我忽略了那个条款。
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多