1

SQLite查询中出现此错误:

select f.rid, c.title, sum(some_expression) as ratio
from doesntmatter
where c.active = 1 or (ratio = 1.0 and c.active = 0
      and c.deactivated in (1, 2, 3, 4, 5)
group by f.rid

这个问题用having子句解决:

select f.rid, c.title, sum(some_expression) as ratio
from doesntmatter
where c.active = 1 or (c.active = 0
      and c.deactivated in (1, 2, 3, 4, 5)
group by f.rid
having ratio = 1.0

但在我的例子中,这改变了表达式的语义。你知道如何实现原始where子句中的表达吗?

4

1 回答 1

2

基本上,您不能在 where 子句中引用别名列。看看这个问题,看看如何解决这个问题。

select此外,您应该将语句中存在的所有非聚合列添加到组中,在这种情况下,c.id并且c.title.

很难为您重写该查询,因为逻辑有点难以理解(因为错误的分组依据)。

编辑:

经过深思熟虑,您可能只需要更正group by.

select c.id, c.title, sum(some_expression) as ratio
from doesntmatter
where c.active = 1 or (c.active = 0 and c.deactivated in (1, 2, 3, 4, 5))
group by c.id, c.title
having ratio = 1.0

或许:

select f.rid, sum(some_expression) as ratio
from doesntmatter
where c.active = 1 or (c.active = 0 and c.deactivated in (1, 2, 3, 4, 5))
group by f.rid
having ratio = 1.0

我无法帮助您完成前一部分,因为我不知道您的表格的字段或数据,也不知道如何解释它们。但是选择 group by 中不存在的字段是一个坏主意。无论如何,请记住,您始终可以加入原始表格并获取您正在寻找的信息,而不仅仅是select.

于 2012-02-26T14:47:43.780 回答