sql - 如何选择一组预定义的值及其计数?
问题描述
为了设置问题,假设我想显示销售团队中三个人的总销售额。Bob 和 Alice 有销售,但 James 是新推销员,没有销售。
有一个表sales
,其数据如下:
ID | 卖方 | 数量 |
---|---|---|
0 | 爱丽丝 | 5 美元 |
1 | 鲍勃 | 4 美元 |
2 | 爱丽丝 | 16 美元 |
3 | 鲍勃 | 6 美元 |
我可以像这样使用 SUM:
SELECT seller, SUM(amount)
FROM sales
GROUP BY seller
...产生一个结果集,如:
卖方 | 总销售额 |
---|---|
爱丽丝 | 21 美元 |
鲍勃 | 10 美元 |
但是,这不包括新来的詹姆斯,没有销售。我想要的结果集是:
卖方 | 总销售额 |
---|---|
爱丽丝 | 21 美元 |
鲍勃 | 10 美元 |
詹姆士 | $0 |
问:如何获得包含 James(零)销售额的所需结果集?
请注意,销售人员列表不存储在任何其他表中;我希望我需要将它硬编码到我的查询中,但我不知道如何。
解决方案
理想情况下,您应该有一个要出现在报告中的专用卖家表格。没有这个,我们可以使用包含所有卖家名称的内联联合子查询。
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;
推荐阅读
- ios - 是否有每个控件/视图的所有 UIApperance 特征的列表?
- javascript - 重绘函数不是重绘每个对象
- c# - AWS Kinesis .NET 消费者
- c++11 - insert() 中的分段错误,C++ 上的双向链表
- node.js - 节点 oracledb 执行 pl/sql 函数
- c# - Etag 的每个组合都被视为无效。当我在图形资源管理器中执行相同的请求时,它可以工作
- python - 如何阅读python文档?
- python - 将 Python 连接到 MySQL 数据库
- activeadmin - 活动管理员在唯一字段上创建附加 URL
- python - Jupyter - 不确定是否不工作或链接断开