Vertica DB 中的交叉连接和聚合

Cross join and aggregation in Vertica DB

我在 Vertica 数据库中有两个表

1) 交叉连接所有现有位置和类别

location_1 category_1

location_1 category_2

...

location_2 category_1

location_2 category_2

...

location_n category_n-1

location_n category_n

2) 位置和类别已知的项目列表:

item_1 location_1 category_4

item_2 location_8 category_3

...

我想计算一下,每个location+category的组合有多少items。我该怎么做?

一种可能的方法:

   SELECT c.location, c.category, COUNT(i.item)
     FROM crosses c
LEFT JOIN items i
       ON i.location = c.location AND i.category = c.category
 GROUP BY c.location, c.category

SQLFiddle.

想法是 LEFT JOIN 的结果将包含 crosses table 中的所有位置和类别 - 但缺少项目的行将被 NULL 编辑。

我认为这种方法适合你

    select Cross_j.location,Cross_j.category,count(item) from items
inner join
    (
    SELECT e.location,e.category FROM crosses as e CROSS JOIN crosses as w
    ) Cross_j
    on Cross_j.location=items.location and Cross_j.category=items.category
    group by Cross_j.location,Cross_j.category