在发布此问题之前,我尝试了很多其他选择。 我在表A上查询了列:id,num,user_id。 id是PK,user_id可以是重复的。 我需要拥有所有行,以便只有唯一的user_id选择具有最高的num值。为此,我在下面提出了一个SQL,它将在Oracle数据库中运行。我在Postgres数据库的rails平台上使用ruby。
select stats.* from stats as A
where A.num > (
select B.num
from stats as B
where A.user_id == B.user_id
group by B.user_id
having B.num> min(B.num) )
我尝试通过主动记录方法编写此查询,但仍然遇到
PG :: GroupingError:ERROR:column" b.num"必须出现在GROUP BY中 子句或用于聚合函数
Stat.where("stats.num > ( select B.nums from stats as B where stats.user_id = B.user_id group by B.user_id having B.num < max(B.num) )")
有人可以告诉我编写此查询的其他方式
答案 0 :(得分:0)
Rails中子查询的SELECT
子句与您示例的子查询不匹配。请注意,由于您在min(B.num)
子句中执行了汇总功能HAVING
,因此您还必须将其包含在SELECT
子句中:
Stat.where("stats.num > ( select B.num from stats as B where stats.user_id = B.user_id group by B.user_id having B.num < max(B.num) )")
您可能还需要一个条件来处理select B.num from stats as B where stats.user_id = B.user_id group by B.user_id having B.num < max(B.num)
返回多行的情况。