簡體   English   中英

MySQL復雜算術

[英]MySQL Complex Arithmetic

我有一個MySQL表設置如下:

debts

--------------------------
owed_by | owed_to | amount
--------|---------|-------
Alice   | Bob     | 5
Bob     | Jane    | 10
Alice   | Jane    | 10
Jane    | Bob     | 5

在MySQL中是否可以編寫一個查詢來返回每個人所欠的總數? 他們欠他的是不重要的,我只想歸還每個人和(總人欠 - 總人數欠款)

獲得總欠款很容易

SELECT `owed_by`, SUM(`amount`) as 'Total Debt'
FROM `debts`
GROUP BY `owed_by`
ORDER BY SUM(`amount`) DESC

但我無法弄清楚如何減去欠他們的東西。

另外,作為一般規則,在MySQL(如果可能)或PHP中執行這樣的操作會更好嗎?

這是一個SQL小提琴我的示例數據: http ://sqlfiddle.com/#!2 / dd7cf / 1

你可以結合雙方:

select Person, sum(debt) as 'Total Debt'
from (
    select owed_by as 'Person', amount as 'debt'
    from debts
    union all
    select owed_to, -1*amount
    from debts
) as q
group by Person;
SELECT owed.owed_by, owed.amount - coalesce(owns.amount, 0) as `Total Debt`
FROM (
        select owed_by, sum(amount) as amount
        from debts
        group by owed_by
    ) owed
    left join (
        select owed_to, sum(amount) as amount
        from debts
        group by owed_to
    ) owns on owed.owed_by = owns.owed_to
ORDER BY `Total Debt` DESC
SELECT od.person, od.amount - COALESCE(ow.amount, 0) AS balance  
FROM (SELECT owed_to AS person, SUM(amount) AS amount FROM debts GROUP BY owed_to) od  
LEFT OUTER JOIN (SELECT owed_by AS person, SUM(amount) AS amount FROM debts GROUP BY owed_by) ow  
ON od.person = ow.person
UNION  
SELECT owed_by, SUM(amount) * (-1) FROM debts   
WHERE owed_by NOT IN (SELECT DISTINCT owed_to FROM debts)   
GROUP BY owed_by; 
SELECT `owed_by`, SUM(`amount`) as 'Total Debt'.
(select sum(amount) from debts d2 where d1.owed_by = d2.owed_to) as `Total Plus`
FROM `debts` d1
GROUP BY `owed_by`
ORDER BY SUM(`amount`) DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM