【发布时间】:2019-01-09 16:09:17
【问题描述】:
我有一张现有客户表和另一张潜在客户表。我想返回一个潜在客户列表,按他们出现的现有购买者的半径排序。
潜在客户表中每个现有客户都有很多行,并且给定现有客户周围的半径可能包含多个潜在客户。我想返回按现有客户半径计数排序的潜在客户列表。
SELECT pur.contact_id AS purchaser, count(pot.*) AS nearby_potential_customers
FROM purchasers_geocoded pur, potential_customers_geocoded pot
WHERE ST_DWithin(pur.geom,pot.geom,1000)
GROUP BY purchaser;
有人对如何进行有建议吗?
编辑:
在一些帮助下,我编写了这个查询,它似乎可以完成这项工作,但我现在正在验证。
WITH prequalified_leads_table AS (
SELECT *
FROM nearby_potential_customers
WHERE market_val > 80000
AND market_val < 120000
)
, proximate_to_existing AS (
SELECT pot.prop_id AS prequalified_leads
FROM purchasers_geocoded pur, prequalified_leads_table pot
WHERE ST_DWithin(pot.geom,pur.geom,100)
)
SELECT prequalified_leads, count(prequalified_leads)
FROM proximate_to_existing
GROUP BY prequalified_leads
ORDER BY count(*) DESC;
【问题讨论】:
-
您添加的查询中的 CTE 使其更易于阅读。但它们不是必需的,单个
SELECT会更快。
标签: sql postgresql aggregate postgis rank