【问题标题】:Cross join and aggregation in Vertica DBVertica DB 中的交叉连接和聚合
【发布时间】:2018-07-19 12:30:58
【问题描述】:
我在 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
...
我想计算一下,每个位置+类别组合中有多少项目。我该怎么做?
【问题讨论】:
标签:
sql
aggregate-functions
vertica
【解决方案1】:
一种可能的方法:
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 表中的所有位置和类别 - 但缺失项目的行将是 NULL-ed。
【解决方案2】:
我认为这种方法对你有用
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