[英]MySQL SELECT SUM based on another table
我在MySQL
上有一張桌子
tb_currencies
currencyid | currency_name
CU0001 | IDR
CU0002 | SGD
CU0003 | USD
tb_currency_converters
currencyconverterid | currency_month | from_currencyid_fk | to_currencyid_fk | amount
CC0001 | 2018-03-01 | CU0001 | CU0002 | 0.00009
CC0002 | 2018-03-01 | CU0002 | CU0001 | 10425
CC0003 | 2018-03-01 | CU0003 | CU0002 | 1.31964
tb_budgets
budgetid | budget_month | departmentid_fk | currencyid_fk
BU201803000001 | 2018-03-01 | DP0003 | CU0002
BU201803000002 | 2018-03-01 | DP0002 | CU0002
tb_items
itemid | item_name | currencyid_fk | price
IT0001 | Mouse | CU0001 | 165000
IT0002 | Keyboard | CU0002 | 20
IT0003 | TV LCD | CU0003 | 350
tb_pro_request
requestid | budgetid_fk | itemid_fk | quantity
RQ201803000001 | BU201803000001 | IT0002 | 1
RQ201803000002 | BU201803000001 | IT0003 | 5
RQ201803000003 | BU201803000001 | IT0004 | 1
例:
我的departmentid_fk
是: DP0003
,表示我的預算是貨幣SGD
。
在tb_pro_request上 ,有2個項目使用預算部門的貨幣(SGD)來交易不同的貨幣(IDR和USD)。
我想要的是,需要先將兩種貨幣使用不同的貨幣轉換為SGD
(由於我的部門預算為SGD),然后將其SUM
。
*邏輯,如果貨幣是SGD
則無需轉換,但如果沒有SGD
那么它首先使用轉換tb_currency_converters
然后SUM
它。
是否可以直接查詢?
到目前為止,我的查詢代碼:
SELECT
R.requestid,
R.budgetid_fk,
R.category,
R.itemid_fk,
SUM(R.quantity),
R.request_date,
R.investmentid_fk,
R.remarks,
R.approval_status,
I.itemid,
I.item_name,
I.price,
SUM(R.quantity) * I.price as total,
B.budgetid,
B.budget_month
FROM
tb_pro_request R,
tb_items I,
tb_budgets B
WHERE
R.itemid_fk = I.itemid AND
R.budgetid_fk = B.budgetid AND
R.investmentid_fk = '' AND
B.active = 'Y' AND
(R.approval_status = 'P' OR R.approval_status = 'A') AND
DATE_FORMAT(B.budget_month,'%Y-%m') = '2018-03' AND
B.departmentid_fk = 'DP0003'
GROUP BY I.currencyid_fk
我想我對您的FK有點困惑,但至少您有精神;)
MySQL 5.6模式設置 :
查詢1 :
SELECT
R.budgetid_fk,
SUM(R.quantity),
SUM(R.quantity * I.price * COALESCE(CC.amount,1)) as total,
B.budgetid,
B.budget_month
FROM tb_pro_request R
INNER JOIN tb_items I
ON R.itemid_fk = I.itemid
INNER JOIN tb_budgets B
ON R.budgetid_fk = B.budgetid
AND B.active = 'Y'
LEFT JOIN tb_currency_converters CC
ON CC.from_currencyid_fk = I.currencyid_fk
AND CC.to_currencyid_fk = B.currencyid_fk
WHERE
R.investmentid_fk = ''
AND (
R.approval_status = 'P'
OR R.approval_status = 'A'
)
AND DATE_FORMAT(B.budget_month,'%Y-%m') = '2018-03'
AND B.departmentid_fk = 'DP0003'
GROUP BY R.budgetid_fk
結果 :
| budgetid_fk | SUM(R.quantity) | total | budgetid | budget_month |
|----------------|-----------------|-------------------|----------------|--------------|
| BU201803000001 | 7 | 575.2840143424692 | BU201803000001 | 2018-03-01 |
您的查詢是無效的SQL,因為您正在匯總數據,但仍顯示未匯總的列,例如requestid
。 哪個requestid
? 可以有幾個。
以下按預算貨幣分組。 如果department_fk
加budget_month
在表中唯一tb_budgets
,那么我們選擇只是一個單一的之一,因此可以去除GROUP BY
子句。
select
sum(i.price * r.quantity * coaleasce(cc.amount, 1)) as total,
c.currency_name
from tb_budgets b
join tb_pro_request r on r.budgetid_fk = b.budgetid
and r.approval_status in ('P','A')
and r.investmentid_fk = ''
join tb_items i on i.itemid = r.itemid_fk
join tb_currencies c on c.currencyid = b.currencyid_fk
left join tb_currency_converters cc on cc.currency_month = b.budget_month
and cc.from_currencyid_fk = i.currencyid_fk
and cc.to_currencyid_fk = b.currencyid_fk
where b.departmentid_fk = 'DP0003'
and date_format(b.budget_month,'%Y-%m') = '2018-03'
and b.active = 'Y'
group by c.currency_name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.