使用Rails 4 Activerecord将多个列数合并为一个查询

伊拉

Rails 4.1,Postgres 9.3,部署到Heroku

我正在尝试减少对数据库的调用次数。

我有一张大桌子,调查,有多个布尔列,如role_composerrole_performer等等。

控制器有多个查询,例如

@sample = Survey.where(...whatever...)
@Composers = @sample.count("case when role_composer then true end")
...
@Performers = @sample.count("case when role_performer then true end")

这可以正常工作,但是会导致对数据库的许多单个查询,这些查询仅在选择中的表达式不同。有没有一种方法可以将其构造为一个具有多个聚合/计算列的查询?我也有带有average()和表达式的查询,但最常见的是count()。

在postgres中,这有效:

SELECT count(case when role_composer then true end) as "COMPOSERS", count(case when role_performer then true end) as "PERFORMERS" from surveys;

有什么方法可以通过@sample上的Activerecord方法来执行此操作,而不是求助于find_by_sql()?

我已经试过各种方法都没有成功:.count().count().count([array]).select("count(...) as col1, count(...) as col2").select(["count(...) as col1", "count(...) as col2"])

预先感谢您的任何答案。

亩太短

.select("count(...) as col1, count(...) as col2")如果您记住以下两点,则您的版本应该可以正常工作:

  1. M.where(...).select(...) 即使查询仅返回一行,也将返回多个内容。
  2. 仅仅因为某些东西没有出现在inspect输出中并不意味着它不存在。

您在没有GROUP BY的情况下进行汇总,因此只能返回一行。要展开该行,您可以说first

counts = Survey.where(...)
               .select('count(case when role_composer then true end) as composers,  count(case when role_performer then true end) as performers')
               .first

那会给你一个Survey实例counts如果您counts在控制台中查看该内容,则会看到类似以下内容的内容:

#<Survey > 

inspect输出只包括列中的值(即事物的Survey类知道),但composersperformers将在那里。但是,由于ActiveRecord不知道它们应该是什么类型,因此它们将作为字符串输出:

composers  = counts.composers.to_i
performers = counts.performers.to_i

select如果您要寻找的话,您的一切都会在那里。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ransack和Rails 4将多个搜索表单结果合并为一个

来自分类Dev

如何使用node.js将多个Mongodb查询合并为一个查询?

来自分类Dev

可以将4个查询合并为一个没有多个条件的子查询吗?

来自分类Dev

将多个jar合并为一个(使用Maven)

来自分类Dev

Rails 4:将两个数据库变量合并为一个条件语句以进行显示

来自分类Dev

Rails 4 ActiveRecord多个查询

来自分类Dev

Neo4J Cypher将2个查询合并为一个

来自分类Dev

将两个查询结果合并为一个,然后使用该结果计算另一列

来自分类Dev

使用 Rails 4 进行 ActiveRecord 查询

来自分类Dev

将 4 个表合并为一个,每个表为一列?

来自分类Dev

通过终端将多个mp4文件合并为一个视频

来自分类Dev

如何将4列数据合并为一个列?

来自分类Dev

如何使用ffmpeg将WebM音频(Opus)和MP4视频(H.264)合并为一个MP4文件

来自分类Dev

是否可以将这4个查询合并为一个更有效的查询?

来自分类Dev

如何使用sp将两个选择查询结果合并为一个结果?

来自分类Dev

如何使用sp将两个选择查询结果合并为一个结果?

来自分类Dev

使用 Eloquent 将两个查询合并为一个

来自分类Dev

如何使用SQL将两个或多个表合并为一个

来自分类Dev

Rails 4 ActiveRecord,如果记录存在,请使用id,否则创建一个新记录

来自分类Dev

使用一个键将多个文件合并为一个文件,然后使用perl重新排列各列。

来自分类Dev

如何使用Ruby将多个CSV文件合并为一个大CSV文件?

来自分类Dev

使用MSBuild将多个JSON文件合并为一个JSON文件

来自分类Dev

使用GNU Make,如何将多个文件合并为一个?

来自分类Dev

如何使用PDFBox将多个小型PDF合并为一个,而不会耗尽堆空间?

来自分类Dev

使用熊猫将多个数据框合并为一个

来自分类Dev

使用PowerShell将多个CSV文件合并为一个

来自分类Dev

使用与ABC中的文件B相同的行数将多个文件合并为一个

来自分类Dev

使用for循环将多个列表合并为python中的一个列表

来自分类Dev

使用正则表达式将多个标签合并为一个标签

Related 相关文章

  1. 1

    使用Ransack和Rails 4将多个搜索表单结果合并为一个

  2. 2

    如何使用node.js将多个Mongodb查询合并为一个查询?

  3. 3

    可以将4个查询合并为一个没有多个条件的子查询吗?

  4. 4

    将多个jar合并为一个(使用Maven)

  5. 5

    Rails 4:将两个数据库变量合并为一个条件语句以进行显示

  6. 6

    Rails 4 ActiveRecord多个查询

  7. 7

    Neo4J Cypher将2个查询合并为一个

  8. 8

    将两个查询结果合并为一个,然后使用该结果计算另一列

  9. 9

    使用 Rails 4 进行 ActiveRecord 查询

  10. 10

    将 4 个表合并为一个,每个表为一列?

  11. 11

    通过终端将多个mp4文件合并为一个视频

  12. 12

    如何将4列数据合并为一个列?

  13. 13

    如何使用ffmpeg将WebM音频(Opus)和MP4视频(H.264)合并为一个MP4文件

  14. 14

    是否可以将这4个查询合并为一个更有效的查询?

  15. 15

    如何使用sp将两个选择查询结果合并为一个结果?

  16. 16

    如何使用sp将两个选择查询结果合并为一个结果?

  17. 17

    使用 Eloquent 将两个查询合并为一个

  18. 18

    如何使用SQL将两个或多个表合并为一个

  19. 19

    Rails 4 ActiveRecord,如果记录存在,请使用id,否则创建一个新记录

  20. 20

    使用一个键将多个文件合并为一个文件,然后使用perl重新排列各列。

  21. 21

    如何使用Ruby将多个CSV文件合并为一个大CSV文件?

  22. 22

    使用MSBuild将多个JSON文件合并为一个JSON文件

  23. 23

    使用GNU Make,如何将多个文件合并为一个?

  24. 24

    如何使用PDFBox将多个小型PDF合并为一个,而不会耗尽堆空间?

  25. 25

    使用熊猫将多个数据框合并为一个

  26. 26

    使用PowerShell将多个CSV文件合并为一个

  27. 27

    使用与ABC中的文件B相同的行数将多个文件合并为一个

  28. 28

    使用for循环将多个列表合并为python中的一个列表

  29. 29

    使用正则表达式将多个标签合并为一个标签

热门标签

归档