Sql 活动记录嵌入表。其中('x')。select语句中的计数

Sql 活动记录嵌入表。其中('x')。select语句中的计数,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我正在设置一个AR查询,它基本上是用来查找跨越三个不同表的几个值的平均值。如何将特定计数查询的结果嵌入到活动记录select语句中,这让我很头疼 仅此查询本身就返回3: Order.whereuser_id:319.count=>3 我的问题是,我是否可以将其作为SQL别名嵌入select语句中,如下所示: Table.xxxxxx.selectOrder.whereuser\u id:319.count AS count,user\u id,SUMquantity*current\u pric

我正在设置一个AR查询,它基本上是用来查找跨越三个不同表的几个值的平均值。如何将特定计数查询的结果嵌入到活动记录select语句中,这让我很头疼

仅此查询本身就返回3: Order.whereuser_id:319.count=>3

我的问题是,我是否可以将其作为SQL别名嵌入select语句中,如下所示: Table.xxxxxx.selectOrder.whereuser\u id:319.count AS count,user\u id,SUMquantity*current\u price AS revenue.xxxxx


当我声明第一个计数别名时,它似乎抛出了一个错误,并且通常无法识别我试图执行的操作。关于语法有什么想法吗?

好吧,在检查了一点之后,我把注意力转移到了ActiveRecord select语法上

这是一种可以接受可变长度参数的方法。因此,你的失败:

Table.xxxxxx.select("Order.where(user_id: 319).count AS count,user_id, SUM(quantity*current_price) AS revenue").xxxxx
在为放错位置的ActiveRecord语句替换正确的SQL之后,应该更像这样[小心,在大多数情况下不能使用as count,count是保留的]:

Table.xxxxx.select("(SELECT count(id) from orders where user_id=319) as usercount", "user_id","SUM(quantity*current_price) AS revenue").xxxx
但我想你应该需要更多的用户id表

因此,我会跳过模型,转到直接SQL,始终小心避免注入:

ActiveRecord::Base.connection.execute('SELECT COUNT(orders.id) as usercount, users.id from users, orders where users.id=orders.user_id group by users.id')
这是简化的,当然,你可以应用其余的数据,我目前不知道相应。上述简化而非完整的解决方案也可以写成:

Order.joins(:user).select("count(orders.id) as usercount, users.id").group(:user_id)

您需要对其中的所有表进行sql查询。我建议您首先从sql的角度进行查找。这就像试着吃你的勺子。。。你不吃你的勺子,你用你的勺子吃…@RubyRacer我有一个SQL查询,其中有我的表,我只是粘贴了我查询中抛出上述错误的部分。在我整个数据库模式的上下文之外,整个查询将很难理解到底发生了什么,这就是为什么我刚刚粘贴了问题部分,这不是正确的SO协议吗?如果您仍然需要答案,我将在几个小时内提供答案。我很喜欢@RubyRacer,只要您能够将其组合在一起。我为这件事绞尽脑汁,但它似乎并没有像耶托克那样受到如此多的关注,我在这里。。。试图弄清楚第三个模型是什么。我想知道每张桌子都有什么。我看到您有Order的用户id,表是您的主要查询表,第三个是什么,用户?请更新您的问题,以包含表如何以id相互连接,例如表用户订单中的用户\ id