假设我有一个客户表和一个销售订单表,其架构如下:
- 客户 = {id, 姓名}
- 销售订单 = {id, customer_id, sales_representer}
具有以下定义:
- id 是两个表中的主键。
- customer_id 是外键引用客户。
我想实现以下查询:
For any customer whose sales_representer is 100, find the customer id,
customer name and the number of his overall orders.
我构建了以下查询:
select C.id, C.name, count(C.id)
from customer C, sales_order S
where C.id = S.customer_id and
S.sales_represntor = '100'
group by C.id, C.nname;
但作为 count(C.id) 的结果,我只得到 sales_representer 为 100 的销售数量。
我知道我可以添加另一个 sales_order 实例(即 S2)并从中进行计数,但在我看来它根本没有效率。
有人有解决办法吗?
谢谢
您可以使用相关子查询来计算销售额。
(在 SQLite 中,子查询通常与联接一样高效。)
SELECT id,
name,
(SELECT COUNT(*)
FROM sales_order
WHERE customer_id = customer.id) AS orders
FROM customer
WHERE id IN (SELECT customer_id
FROM sales_order
WHERE sales_representer = '100')
如果您关心效率,您应该使用以下命令检查查询解释查询计划 http://www.sqlite.org/eqp.html,或者更好的是,只需测量它们即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)