Ein vom Unternehmen betriebenes Einkaufszentrum stellte plötzlich fest, dass es ein Problem mit der Funktion zum Zurückziehen von Bestellungen gab. Eine große Anzahl von Händlern berichtete, dass der Betrag nicht mit dem Bestellbetrag übereinstimmte. Es entstand also ein Bedarf, die Auszahlungstabelle und die Lieferantentabelle als Ergebnissatz zu verwenden, den Bestellbetrag in der Bestelltabelle zu verbinden und den Betrag in der Bestelltabelle mit dem vom Händler abgehobenen Betrag in der Reflexionstabelle zu vergleichen um zu prüfen, ob der Händler mehr Geld abgehoben hat.
Mein Anfrageprozess ist unten aufgezeichnet.
Zu Beginn habe ich im ersten Schritt die Auszahlungstabelle als Haupttabelle verwendet, um die relevanten Ergebnisse abzufragen. Die MySQL-Anweisung lautet wie folgt: Die Abfrageergebnisse sind wie gezeigt normal: und die Abfrage Die Zeit wird offensichtlich verlängert, und die MySQL-Anweisung lautet wie folgt:
SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS '供应商ID' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)' FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ;
Die Vergleichstabelle der Abfrageergebnisse lautet wie folgt:
Nach dem Training möchte ich den Betrag der Auszahlungstabelle und den Betrag der Bestelltabelle direkt abfragen Left Join ist nicht möglich. Durch die Online-Prüfung von Informationen und die Bitte um Rat in der technischen Gruppe optimierte
die Idee: Erstellen Sie gute Statistiken zu Bargeldabhebungen, erstellen Sie gute Statistiken zu Bestellungen und erstellen Sie einen Link basierend auf der Lieferanten-ID für die letzten beiden Ergebnissätze
The Der nächste Schritt ist der erste Schritt: Sammeln Sie die Statistiken der Abhebungen. Der zweite Schritt: Sammeln Sie die Daten der Bestelltabelle. Aufgrund der Verwendung des Systems verwende ich direkt die Bestellprodukttabelle, um die Gesamtbestellmenge zu berechnen. Auch dieser Schritt ist in drei Schritte unterteilt. Ich gebe den Code direkt ein:
SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS '供应商ID' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)',SUM(yo.pay_price) FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id LEFT JOIN yoshop_order AS yo ON yo.supply_ids =ysw.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ;
1.查询yoshop_order所有进行中,已完成的 订单id(order_id); SELECT order_id FROM yoshop_order WHERE order_status IN (10,30); 2.查询没有退款的订单ID SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund); 3.查询订单商品表中 所有的订单金额 SELECT supply_id AS '供应商ID' , SUM(total_pay_price) AS '供应商订单总金额' FROM yoshop_order_goods WHERE create_time < 1647446400 AND order_pay_status = 0 AND order_id IN(SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund) ) GROUP BY supply_id ORDER BY SUM(total_pay_price) DESC ;
SELECT * FROM ( SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS 'supply_id' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)' FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ) AS t1 union all // left join ,这里是注释记得删除 SELECT * FROM -- 这里是错误的不应该在查询 (SELECT supply_id AS 'supply_id' , SUM(total_pay_price) AS total_pay_price FROM yoshop_order_goods WHERE create_time < 1647446400 AND order_pay_status = 0 AND order_id IN( SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund) ) GROUP BY supply_id ORDER BY SUM(total_pay_price) DESC ) AS t2 ON t1.suppply_id = t2.suppply_id
Das obige ist der detaillierte Inhalt vonBeispielanalyse einer von MySQL abgeleiteten Tabellenverknüpfungstabellenabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!