id,
deleted,
created,
modified,
cc_id, name, mobile, phone, sex, id_no, wechat_no, qq_no, school, industry, department, duty, terminal, client_manager_id, description
SELECT linkman.id AS id,
linkman.name AS name,
linkman.mobile AS mobile,
linkman.phone AS phone,
linkman.sex AS sex,
linkman.id_no AS idNo,
linkman.wechat_no AS wechatNo,
linkman.qq_no AS qqNo,
linkman.department AS department,
linkman.duty AS duty,
user.name AS clientManager,
linkman.terminal AS terminal,
COALESCE(vol.cnt, 0) AS orderVolume,
COALESCE(vol.revenue, 0) AS estimatedRevenue,
linkman.created AS created
FROM customer_linkman AS linkman
LEFT JOIN user ON user.id = linkman.client_manager_id
/* 先算 来单量 与 评估值 再一次性 JOIN */
LEFT JOIN (SELECT clientele_contact_id,
SUM(cnt) AS cnt,
SUM(revenue) AS revenue
FROM (
/* assets */
SELECT assets.clientele_contact_id,
COUNT(*) AS cnt,
COALESCE(SUM(order_fund.real_amount), 0) AS revenue
FROM assets
LEFT JOIN order_fund
ON order_fund.business_type = 'ASSET_BUSINESS'
AND order_fund.deleted = 0
AND order_fund.business_id = assets.id
WHERE assets.deleted = 0
AND clientele_type = '个人'
GROUP BY assets.clientele_contact_id
UNION ALL
/* major */
SELECT major.clientele_contact_id,
COUNT(*),
COALESCE(SUM(order_fund.real_amount), 0)
FROM major
LEFT JOIN order_fund
ON order_fund.business_type = 'MAJOR_BUSINESS'
AND order_fund.deleted = 0
AND order_fund.business_id = major.id
WHERE major.deleted = 0
AND clientele_type = '个人'
GROUP BY major.clientele_contact_id
UNION ALL
/* personal */
SELECT personal.clientele_contact_id,
COUNT(*),
COALESCE(SUM(order_fund.real_amount), 0)
FROM personal
LEFT JOIN order_fund
ON order_fund.business_type = 'PERSONAL_BUSINESS'
AND order_fund.deleted = 0
AND order_fund.business_id = personal.id
WHERE personal.deleted = 0
AND clientele_type = '个人'
GROUP BY personal.clientele_contact_id) AS t
GROUP BY clientele_contact_id) AS vol ON vol.clientele_contact_id = linkman.id
WHERE linkman.cc_id = 1
AND (
linkman.name LIKE CONCAT('%',#{dto.keyword},'%') OR
linkman.mobile LIKE CONCAT('%',#{dto.keyword},'%') OR
linkman.phone LIKE CONCAT('%',#{dto.keyword},'%') OR
linkman.wechat_no LIKE CONCAT('%',#{dto.keyword},'%') OR
linkman.qq_no LIKE CONCAT('%',#{dto.keyword},'%')
)
AND linkman.terminal = #{dto.terminal}
AND linkman.client_manager_id = #{dto.clientManagerId}
ORDER BY COALESCE(vol.revenue, 0) DESC