gpt4 book ai didi

php - SQL SUM() 不同表不同列

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:17 25 4
gpt4 key购买 nike

分类表

mysql> SELECT * FROM cats;
+------+-----------+
| c_id | c_name |
+------+-----------+
| 1 | cats 1 |
| 2 | cats 2 |
| 3 | cats 3 |
+------+-----------+

元表

mysql> SELECT * FROM meta;
+------+------+----------+-------------+-------+
| m_id | c_id | name | description | costs |
+------+------+----------+-------------+-------+
| 1 | 1 | Abhijit1 | description | 100 |
| 2 | 1 | Abhijit2 | description | 200 |
| 3 | 2 | Abhijit3 | description | 500 |
| 4 | 3 | Abhijit4 | description | 800 |
+------+------+----------+-------------+-------+

meta和cats表共同的是c_id元表猫 c_id(1) 元表有 2 (Abhijit1,Abhijit2) 行,m_id(1,2)

交易表

mysql> SELECT * FROM transactions;
+------+------+------------+--------+
| t_id | m_id | date | amount |
+------+------+------------+--------+
| 1 | 1 | 2016-02-01 | 50 |
| 2 | 1 | 2016-02-06 | 50 |
| 3 | 3 | 2016-02-15 | 400 |
| 4 | 4 | 2016-02-19 | 150 |
+------+------+------------+--------+

事务和元表共同的是m_idm_id 1 的事务有 2 行 t_id(1,2)这个表主要是支付金额和日期

我想对每个类别的所有成本(来自元表)和金额(来自交易表)求和()。

表与

cats.c_id
|
|-----> meta.c_id
|-----> meta.m_id
|-----> transactions.m_id

这是错误的。猫 id 1 的成本是 300,但在这里我得到了 400

I Want Get Return From Query Like This:
+------+-----------+--------------+---------------+
| c_id | c_name | SUM(m.costs) | SUM(t.amount) |
+------+-----------+--------------+---------------+
| 1 | cats 1 | 300 | 100 |
| 2 | cats 2 | 500 | 400 |
| 3 | cats 3 | 800 | 150 |
+------+-----------+--------------+---------------+

这里 SUM(m.costs) 都是 Cost For a category 而 SUM(t.amount) 都是 paid for a category

请帮助我或任何更好的表管理想法。

最佳答案

问题出在您加入交易以获得SUM(t.amount)。因此,如果单个 meta 记录与两个 transactions 记录相关联,则 costs 值会被计算两次。

您可以使用相关子查询来计算 SUM(t.amount) 来解决这个问题:

SELECT c.c_id, 
c.c_name,
SUM(m.costs),
(SELECT SUM(t.amount)
FROM transactions AS t
WHERE m.m_id = t.m_id)
FROM cats AS c
LEFT JOIN meta AS m ON c.c_id = m.c_id
GROUP BY c.c_id, c.c_name

输出:

c_id c_name  SUM(m.costs)   SUM(t.amount) 
-----------------------------------------
1 cats 1 300 100
2 cats 2 500 400
3 cats 3 800 150

Demo here

关于php - SQL SUM() 不同表不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com