我已经阅读了有关查询方法“ group”的Ruby文档,但是我很难理解如何使用它。
可以说我有一个名为用户的表,其中有名称,电子邮件,性别字段。
我可以键入User.group(:name).count,它返回键值对为{name:count}的哈希。
为什么User.group(:name)不起作用?
有没有一种对相似名称进行分组并访问这些记录的方法?前任。User.group(:name).first或User.group(:name).each
在我看来,我正在考虑错误地使用“组”。
为什么User.group(:name)不起作用?
GROUP BY
在SQL中使用时,它也需要一个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
列表中的表达式是指未分组列除了聚集函数内,因为会有不止一个可以返回的值对于未分组列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句