我已经在查询方法“group”上阅读了Ruby文档,但我很难理解如何使用它。
假设我有一个名为users的表,并且有字段名称,电子邮件,性别。
我可以输入User.group(:name).count,它返回一个键值对{name:count}的哈希值。
为什么User.group(:name)不起作用?
有没有办法对相似的名称进行分组,并访问这些记录? 恩。 User.group(:name).first或User.group(:name).each
在我看来,我正在考虑错误地使用“群组”。
答案 0 :(得分:1)
为什么User.group(:name)不起作用?
在SQL中使用GROUP BY
时,它也需要一个SELECT
子句。但是在你的情况下它不存在,并且会引发错误。
在您的第一个案例中,查询为SELECT COUNT(*) from users GROUP BY name
,这就是它起作用的原因。
根据您的上一句话,您需要:
User.group(:name).select(:name).each do |record|
# work with record
end
我不知道您使用的是什么数据库客户端,但这是来自Postgresql GROUP BY文档的想法。
GROUP BY
会将所有选定的行压缩为一行,这些行对于分组表达式共享相同的值。 expression可以是输入列名,也可以是输出列(SELECT
列表项)的名称或序号,或者是由输入列值组成的任意表达式。如果不明确,GROUP BY
名称将被解释为输入列名称而不是输出列名称。聚合函数(如果有的话)在组成每个组的所有行中计算,为每个组生成一个单独的值(而没有GROUP BY,聚合生成一个单独的值计算在所有组中选定的行)。当
GROUP BY
存在时,SELECT
列表表达式无法引用除聚合函数之外的未分组列,因为未分组<返回 ungrouped < / em>专栏。