当前位置: 首页 > 面试题库 >

无法选择按created_at分组的行

樊浩初
2023-03-14
问题内容

我有桌子:

+----+----------------------+---------------------+
| id | implemented_features | created_at          |
+----+----------------------+---------------------+
|  1 |                   19 | 2013-07-18 04:10:12 |
|  2 |                    6 | 2013-07-18 04:10:12 |
|  3 |                   26 | 2013-07-19 04:10:12 |
|  4 |                   11 | 2013-07-19 04:10:12 |
|  5 |                    1 | 2013-07-20 04:10:12 |
+----+----------------------+---------------------+

当我直接通过MySQL查询时,它可以按我的要求完美运行

select date(created_at) as date, sum(implemented_features) as sum from summaries group by date(created_at);

但是,当我尝试将此查询转换为ActiveRecord语法时,它返回nil。

2.0.0p0 :035 > Summary.select("date(created_at) as date, sum(implemented_features)").group("date(created_at)")
  Summary Load (0.5ms)  SELECT date(created_at) as date, sum(implemented_features) FROM `summaries` GROUP BY date(created_at)
 => #<ActiveRecord::Relation [#<Summary id: nil>]>

如您所见,两个示例中的最终查询均相等。为什么在ActiveRecord情况下不起作用?

在我的rails项目中使用Rails 4.0.0,Ruby 2.0和mysql db。


问题答案:

我认为您对控制台输出感到有些困惑。

你是这样说的:

Summary.select("date(created_at) as date, sum(implemented_features)")...

因此返回的Summary实例(包含在中ActiveRecord::Relation)没有任何常规Summary属性:no id,no
created_at,no
implemented_featured等。当您调用inspectActiveRecord对象时,它想向您显示该对象内部的内容,这意味着它想要向您显示所包含的数据库属性;您的Summary实例没有任何通常的属性,因此您会看到类似的信息<Summary id: nil>

不用担心,您选择的值确实存在。如果你说:

Summary.select(...).map(&:date)

您应该看到这些date(created_at) as date值。如果为添加别名,sum(implemented_features)则可以使用该别名作为方法名称来提取总和。



 类似资料:
  • 我有一个带有组合框的xaml。由于某种原因,我在那里有一些项目,我不能选择它们,当我选择一个项目时,它通常不允许我更改我的选择,如果它更改了,它仅适用于某些值。这是代码: 我希望我写的很清楚,因为我把它从电脑复制到了手机上。基本上,我有所有的用户,并按部门对他们进行分类。用户只能看到他所在部门的文档,并且可以选择绑定词典中可用的文档。如果不可用,组合框中的项目将为红色且不可检查。这个管用。唯一没有

  • 问题内容: 我想查找一位讲师在特定年份教过多少个模块,并想要选择该讲师的姓名和该讲师的模块数。 问题在于,因为我正在选择,并且必须按名称对其进行分组才能使其正常工作。但是,如果有两个讲师姓名相同,该怎么办?然后,sql将使它们合而为一,这将是错误的输出。 因此,我真正想做的是选择,但选择group by ,而sql不允许我这样做。有办法解决吗? 下表是: 到目前为止,这是我的查询: 问题答案:

  • 问题内容: 我有一个小问题。我有这样格式的PostgreSQL表 我想按5分钟的时间对它们进行分组,并将该组的平均值作为一个单一值,因此将有20%的记录,每条记录平均包含〜5个数字,而时间设置为中的第一个时间值群组。我不知道如何在PgSQL中执行此操作。因此结果将是: 问题答案: 解释 子查询每5分钟从表中的最小值“到最大值”产生一行记录。 以5分钟为间隔将LEFT JOIN返回表切片数据。仔细

  • 感谢任何帮助!第一次海报和努比编码器:)

  • 我试图在Selenium IDE中测试一个记录测试的基于web的应用程序,但遇到了以下问题。 其中一个字段(头衔如先生、夫人等)。)要求用户单击一个按钮,打开一个带有值列表的新窗口。 当我点击按钮时,IDE会记录为< code>css=button。BTNimgH并且在回放脚本时,显示以下错误: [错误]元素css=按钮。未找到BTNimgH 按钮的代码为: 我需要值的字段的代码是: 任何帮助将不

  • 问题内容: 据说如果使用group by子句,则select列列表中必须存在group by列名,但是上面的查询不需要选择sourceobjectid。 问题答案: 结果 不是 遇到的第一行。MySQL非常清楚所谓的“隐藏列”的使用。引用文档: MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用