1

我正在用 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 似乎不支持它。有没有办法可以重写查询/利用其他功能来实现这一点?

4

0 回答 0