新手问题 joins 两个 table 进来后,如果两个进行 group 或 where?

QueXuQ · 2014年07月09日 · 最后由 QueXuQ 回复于 2014年07月10日 · 1657 次阅读

情况是这样的:

Product.joins(:aaa, :bbb).select("SUM(aaa.integer) AS the_integer, SUM(aaa.number) AS the_number").group("aaa.product_id")

这样是 group 一个,可是不知道怎么 group 两个呢?我试着两个方案都不行:

Product.joins(:aaa, :bbb).select("SUM(aaa.integer) AS the_integer, SUM(aaa.number) AS the_number").group("aaa.product_id").group("bbb.product_id")
Product.joins(:aaa, :bbb).select("SUM(aaa.integer) AS the_integer, SUM(aaa.number) AS the_number").group("aaa.product_id, bbb.product_id")

找了好多,都找不到 joins 2 个表时的操作,请问有没有什么提示呢?没有什么头绪呢。

SUM 这个函数写在 SELECT 里记得应该是不好用,因为有单独的 SUM(:xxx), 但是不支持同时 sum 两个字段

你还是写 Product.connection.select_all(' SELECT SUM(column) FROM tables GROUP BY xxxx') 拼个 SQL 不丢人,哈哈

group 的字段必须都要出现在 select 里面啊,不然会报 SQL 错误

#2 楼 @ywjno 我这样使用过程没有报错。这要往 select 加也容易,可是现在重点的疑问是 joins 两个表后,怎么分别 group 呢?找了好久没有找到方法。

#1 楼 @mystery SUM 在 Select 里是可以用的,要把 SUM 放到 Select 里,是因为需要 AS 出一个字段,你说的不放在 Select 里的写法是:

Product.joins(:xxxx),group(xxxx).sum(xxx)

这样输出的是完全不一样的东西,这样输出的是{group: sum, group: sum...} 可是我的疑问是,joins 两个表后,怎么进行 group 啊。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号