[fix]优化SQL

master
hellolujian 6 years ago
parent d8d6855d13
commit 3fac4f2c58

@ -144,17 +144,23 @@
</select>
-->
<!-- 优化后的SQL语句 -->
<!--
优化后的SQL语句
在之前的SQL语句中与transaction表内连接时加了and (t.transaction_type = 'Credit' or t.refund_id is not null)这个条件
是因为在transaction_type = 'Debit'的记录中有的并没有refund_id所以剔除这些记录
优化后的SQL语句去掉了这个条件而是在需要的字段中天健t.refund_id IS NOT NULL这一条件
-->
<select id="listPartnersTradeAmount" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT
p.client_moniker,
p.short_name,
ifnull(sum(if(t.transaction_type = 'Credit', t.clearing_amount, 0)), 0) aud_fee,
count(DISTINCT t.order_id) orders,
max(t.clearing_amount) max_order,
ifnull(sum(if(t.refund_id is not null, if(t.transaction_type='Debit', t.clearing_amount, -t.clearing_amount), 0)), 0) refund_amount,
ifnull(sum(if(t.refund_id is not null and t.transaction_type='Debit', 1, 0)), 0)refund_orders, max(if(t.refund_id is not null and t.transaction_type='Debit', t.clearing_amount, 0)) max_refund
p.short_name,
p.client_moniker,
COUNT(t.refund_id) refund_orders,
COUNT(DISTINCT t.order_id) orders,
IFNULL(MAX(t.clearing_amount), 0) max_order,
MAX(IF(t.refund_id IS NOT NULL, t.clearing_amount, 0)) max_refund,
SUM(IF(t.refund_id IS NOT NULL, t.clearing_amount, 0)) refund_amount,
IFNULL(SUM(IF(t.transaction_type = 'Credit', t.clearing_amount, 0)), 0) aud_fee
FROM sys_clients p
INNER JOIN pmt_transactions t
ON t.client_id = p.client_id
@ -162,34 +168,36 @@
AND t.create_time <= #{end}
]]>
<if test="org_id != null and org_ids == null">
and p.org_id = #{org_id}
AND p.org_id = #{org_id}
</if>
<if test="org_ids != null">
and p.org_id in
AND p.org_id IN
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">
#{org_id}
</foreach>
</if>
<if test="bd_group != null">
and p.client_id in (
SELECT b.client_id FROM sys_client_bd b
AND p.client_id IN (
SELECT b.client_id
FROM sys_client_bd b
INNER JOIN financial_bd_config c
ON c.manager_id = b.bd_id
where b.is_valid = 1
and b.start_date &lt;= now()
and (b.end_date is null or b.end_date &gt;= now())
AND (c.bd_group = #{bd_group} or c.manager_id = #{bd_group})
WHERE b.is_valid = 1
AND b.start_date &lt;= now()
AND (b.end_date IS NULL OR b.end_date &gt;= now())
AND (c.bd_group = #{bd_group} OR c.manager_id = #{bd_group})
<if test="bd_group_bd">
and c.manager_id = #{bd_group_bd}
AND c.manager_id = #{bd_group_bd}
</if>
)
</if>
GROUP BY p.client_id
ORDER BY #{rankType} DESC
<if test="rankType != null">
ORDER BY ${rankType} DESC
</if>
<if test="limit != null">
limit ${limit}
LIMIT ${limit}
</if>
</select>

Loading…
Cancel
Save