我想使用下一个查询来计算某些项目组的平均值
SELECT g.id, i.metric, AVG(i.value) FROM items_group g
JOIN items i ON i.group_id=g.id
GROUP BY g.id, i.metric
但是此查询未在结果中包含空组。我希望这些组的值为0,这表明一组指标是固定的(价格,长度,重量)。非空组1和空组2的所需输出为
group_id|metric|value
__________________________
1 |price |5
1 |length|33
1 |weight|10
2 |price |0
2 |length|0
2 |weight|0
答案 0 :(得分:0)
您可以使用LEFT JOIN
:
SELECT g.id, i.metric, AVG(i.value)
FROM items_group g
LEFT JOIN items i ON i.group_id=g.id
GROUP BY g.id, i.metric
答案 1 :(得分:0)
这有点复杂,因为您需要生成原始数据中不存在的行。
使用cross join
生成行。然后使用left join
引入值:
SELECT ig.id, m.metric, AVG(i.value)
FROM items_group ig CROSS JOIN
(SELECT DISTINCT i.metric FROM items i) m LEFT JOIN
items i
ON i.group_id = ig.id AND i.metric = m.metric
GROUP BY ig.id, m.metric;
如果您有单独的指标表,则可以使用它代替m
的子查询。