计算总和,计算多对多

时间:2017-09-25 18:51:33

标签: mysql

问候我试图总结每笔交易的费用价值。

关联表。

  **Assoc table schema**


    | PK_id | FK_transaction | FK_Expense |
    |-------|----------------|------------|
    |     1 |              1 |         85 |
    |     2 |              2 |         81 |
    |     3 |              3 |         77 |
    |     4 |              4 |         83 |
    |     5 |              5 |         84 |
    |     6 |              6 |        105 |
    |     7 |              7 |        104 |
    |     8 |              8 |         71 |
    |     9 |              8 |         88 |
    |    10 |              8 |         90 |

交易表

**Transaction table schema**

| PK_id | type | value | confirmed_value    |
|-------|------|-------|--------------------|
|     1 |    1 |   3.2 |               0    |
|     2 |    1 |  23.2 |               0    |
|     3 |    1 |  33.2 |               0    |
|     4 |    1 |  43.2 |              11.00 |
|     5 |    1 |  53.2 |               0    |
|     6 |    1 |  63.2 |               0    |
|     7 |    1 |  73.2 |               0    |
|     8 |    1 |  83.2 |              66.00 |
|     9 |    1 |  93.2 |               0    |
|    10 |    1 | 133.2 |              77.00 |
|    11 |    1 | 123.2 |               0    |

Expences Table

| PK_id | value |
|-------|-------|
|    85 |   3.2 |
|    81 |  23.2 |
|    77 |  33.2 |
|    83 |  43.2 |
|    84 |  53.2 |
|   105 |  63.2 |
|   104 |  73.2 |
|    71 |  83.2 |
|    88 |  93.2 |
|    90 | 133.2 |

结果::

| PK_id | value | confirmed_value |
|-------|-------|-----------------|
|     1 |   3.2 |               0 |
|     2 |  23.2 |               0 |
|     3 |  33.2 |               0 |
|     4 |  43.2 |              11 |
|     5 |  53.2 |               0 |
|     6 |  63.2 |               0 |
|     7 |  73.2 |               0 |
|     8 |  83.2 |              66 |
|     8 |  93.2 |              66 |
|     8 | 133.2 |              66 |

渴望 - 在计算之前(只是为了给你一个想法)

| PK_id | value | confirmed_value |
|-------|-------|-----------------|
|     1 |   3.2 |               0 |
|     2 |  23.2 |               0 |
|     3 |  33.2 |               0 |
|     4 |  43.2 |              11 |
|     5 |  53.2 |               0 |
|     6 |  63.2 |               0 |
|     7 |  73.2 |               0 |
|     8 |  309.6 |             66 |

完全理想的结果

计算匹配值COUNT(confirmed_value = value) 计算与COUNT不匹配的条目(confirmed_value!= value)

/ \计算确认值的值 ??总和(transactions.confirmed_value)

并计算价值本身

Should be a row result ( example )
=======================================================================================================================
MATCHED | NOT_MATCHED | SUM(of values) | COUNT(of confirmed equal to value ) | COUNT(of confirmed ! equal to value ) 
=======================================================================================================================
 1      |    10       |    3003.22     |         3                           |  10
=======================================================================================================================

SQL小提琴:http://sqlfiddle.com/#!9/2ab102/9

感谢您提供任何提示

1 个答案:

答案 0 :(得分:0)

尝试此查询 -

SELECT transactions.PK_id,
       SUM(expenses.value),
       transactions.confirmed_value
FROM `assoc`
JOIN `expenses` ON `assoc`.`FK_Expense` = `expenses`.`PK_id`
JOIN `transactions` ON `assoc`.`FK_transaction` = `transactions`.`PK_id`
GROUP BY transactions.PK_id,
         transactions.confirmed_value

小提琴演示 - http://sqlfiddle.com/#!9/2ab102/14