我正在用 java 编写一个程序来从 infobright 数据库中获取记录。这是我需要的表结构、查询和输出格式。
表结构:
column name type
------------ ----------
id integer
date integer
product_id integer
search_engine_id integer
visitor integer
示例查询:
select date,
product_id,
search_engine_id,
sum(visitor)
from report
where date in (201300910, 20130919)
group by search_engine_id,
product_id,
date
order by product_id,
date
上述查询的结果集将采用以下格式:
+----------+-------------+----------------+------------------+
| date | product_id | search_engine_id | sum(visitor) |
+----------+-------------+----------------+------------------+
| 20130910 | 108 | 2 | 7 |
| 20130910 | 108 | 1 | 15 |
| 20130919 | 108 | 1 | 2 |
| 20130919 | 108 | 2 | 3 |
| 20130910 | 107 | 1 | 3 |
| 20130910 | 107 | 2 | 2 |
| 20130919 | 107 | 1 | 2 |
| 20130919 | 107 | 2 | 3 |
| 20130919 | 106 | 1 | 10 |
search_engine_id 有两种类型,即 1 和 2。
对于给定的一天,一个product_id 最多可以存在两次,即search_engine_id 1 的一条记录和search_engine_id 2 的另一条记录。我想要的是根据product_id 对结果进行分组。所以它看起来像:
+-------------------+-------------+----------------+------------------+
| date | product_id | search_engine_id | sum(visitor) |
+-------------------+-------------+----------------+------------------+
| 20130910,20130919 | 108 | 2,1,1,2 | 7,15,2,3 |
在 sql 端这样做的主要原因是为每个 product_id 准备好数据,以便在 java 端使用更少的内存。我已经尝试过group_contact
功能,但 infobright 似乎不支持它。有没有办法可以重写查询/利用其他功能来实现这一点?