簡體   English   中英

基於另一個表的MySQL SELECT SUM

[英]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

您可以在下面看到3種貨幣不同的商品。 我想要的是,轉換為IDR,USD的SGD。 然后求和(成為1行) 在此處輸入圖片說明

我想我對您的FK有點困惑,但至少您有精神;)

SQL小提琴

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_fkbudget_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.

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