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