匹配数组与表的列

时间:2012-07-09 16:13:42

标签: ruby-on-rails database postgresql activerecord

我有一些名为array_of_dates的某些日期。

我有一个名为my_table的表格,其中包含'date'和'count'列。

我有没有办法编写一个有效的记录查询,以便将my_table中的“日期”列与array_of_dates匹配并返回哈希值?所有是来自array_of_dates的日期,所有是来自my_table的'count';如果在array_of_dates的“日期”列中my_table中的日期不存在,则返回零作为

提前致谢。

2 个答案:

答案 0 :(得分:1)

SQL可能如下所示:

SELECT date_col AS key, count(t.date_col) AS value
FROM  (
   SELECT unnest('{2012-07-08, 2012-07-09, 2012-07-10}'::date[]) AS date_col
   ) x
LEFT   JOIN tbl t USING (date_col)
GROUP  BY date_col;

关键元素是带有unnest()LEFT JOIN的子查询,而不是普通连接。

如果找不到匹配日期,则

values将为0,因为count(t.date_col)不会计算NULL个值。

答案 1 :(得分:1)

试试这个:

Model.select("date, count").
  where(:date => array_of_dates).
    reduce(Hash.new(0)){ |h, r| h[r.date] = r.count;h}