如何选择一组预定义的值及其计数?



为了设置问题,假设我想显示销售团队中三个人中每个人的总销售额。鲍勃和爱丽丝有销售,但詹姆斯是新来的销售员,没有销售。

有一个名为sales的表,其中包含如下数据:

id卖家金额
0爱丽丝$5
1鲍勃$4
2爱丽丝$16
3鲍勃$6

理想情况下,您应该有一个专用的卖家表,您希望该表显示在报告中。 没有这个,我们可以使用包含所有卖家名称的内联联合子查询。

SELECT t.seller, COALESCE(SUM(s.amount), 0) AS total_sales
FROM
(
SELECT 'Alice' AS seller UNION ALL
SELECT 'Bob' UNION ALL
SELECT 'James'
) t
LEFT JOIN sales s
ON s.seller = t.seller
GROUP BY
t.seller;

您可以使用 UNION:

WITH people AS(
SELECT 'alice' as person 
UNION ALL SELECT 'bob'
UNION ALL SELECT 'james'
)
SELECT * FROM people LEFT JOIN sales ON people.person = sales.seller

现在,您可以像使用表一样使用people。对左连接产生的空值进行分组和求和将导致 James 为零

嗯。 . .如果您需要对销售人员进行硬编码,那么也许您已经知道新的销售人员。 如果是这种情况,您可以使用union all

select seller, sum(sales)
from sales
group by seller
union all
select 'James', 0;

如果您不想列出所有销售人员,但有一个新销售人员的超级列表,您也可以使用full join

select seller, coalesce(sum(s.sales), 0)
from sales s full join
(select 'James' as seller union all
select 'Bob' as seller
) news
using (seller);

如果您有很长的sellers列表并且不想列出所有列表,这会很方便。

最新更新