这是我的代码:
SELECT m.id, (SELECT count(r.id)
FROM reports as r
WHERE r.date BETWEEN NOW()-INTERVAL '7 days' AND NOW()
and r.decision = 'ACCEPTED'
and r.customer_id in (SELECT c.id
FROM customers as c
WHERE c.manager_id = m.id)) as count
FROM managers as m;
表是经理,客户和报告。我想为每位经理选择所有其客户(具有选定属性)的报告数量。这段代码的问题是,它花费了太多时间,并且以某种方式找不到构建此查询的更好方法。你有什么主意吗?
答案 0 :(得分:1)
我认为,这三个表之间的标准内部联接具有在注释中提到的reports.date
,reports.customer_id
和customers.manager_id
列上定义的索引(还要考虑{{1 }}和managers.id
列应该是已经在其上具有唯一索引的主键),对于性能而言就足够了:
customer.id