postgresql按工作日选择,包括rails中的空记录
Posted
技术标签:
【中文标题】postgresql按工作日选择,包括rails中的空记录【英文标题】:postgres sql selecting by weekday including empty records in rails 【发布时间】:2013-12-24 12:32:01 【问题描述】:我有一个 90% 的查询,我正在查询关于一周中每一天发生的事情的数据,这对那里的数据很好,但我也想要那些不存在的数据(我希望查询包含一周中不存在的几天的零)。
SELECT EXTRACT(dow FROM start_at) AS number, COUNT(*) FROM "events" GROUP BY number
或用于导轨...
Event.select("EXTRACT(dow FROM start_at) AS number, COUNT(*)").group("number")
结果。
+----+--------+-------+
| id | number | count |
+----+--------+-------+
| | 0.0 | 16 | # day of the week Sunday
| | 1.0 | 20 |
| | 2.0 | 29 |
| | 3.0 | 19 |
| | 4.0 | 4 |
+----+--------+-------+
如何扩展此查询以映射一周中的所有日子,即使没有记录? (看起来像这样)。
+----+--------+-------+
| id | number | count |
+----+--------+-------+
| | 0.0 | 16 |
| | 1.0 | 20 |
| | 2.0 | 29 |
| | 3.0 | 19 |
| | 4.0 | 4 |
| | 5.0 | 0 | # i want these zeros too!
| | 6.0 | 0 |
+----+--------+-------+
【问题讨论】:
【参考方案1】:试试这个:
events = Event.select("EXTRACT(dow FROM start_at) AS number, COUNT(*)").group("number")
counts = events.each_with_object() do |event, counts|
counts[event.number.to_i] = event.count
end
weekdays = (0..6).map do |day|
number: day,
count: counts[day] || 0
end
它应该为您提供每天的哈希数组以及当天的计数,即使计数为零。我无法完全测试它,因为我没有您的数据库表,但希望它能为您指明正确的方向。
【讨论】:
以上是关于postgresql按工作日选择,包括rails中的空记录的主要内容,如果未能解决你的问题,请参考以下文章
RedShift / PostgreSQL 中串行类型的替代方案
使用 Rails + Postgresql + Heroku 构建数据库
Rails 6 Docker 与 PostgreSQL 连接错误