使用左连接对不同表中的值求和

6tqwzwtp  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(262)

我想把所有的 coinsm_z_analytics 什么时候 site 编号与相同 idm_b_browsing_live (见下面的结果)。
table:

m_z_analytics

id|site_id|coins|
 1|      1| 0.01|
 2|      2|  0.1|
 3|      1| 0.08|
 4|      2|  0.1|
 3|      3|  0.2|

m_b_browsing_live

id| cpc|
 1|0.09|
 2| 0.1|
 3| 0.5|

最终结果应为:0.38(0.09+0.1+0.09+0.1)
我已经试过了:

SELECT SUM(a.coins) AS money FROM m_z_analytics a
LEFT JOIN m_b_browsing_live b ON b.id=a.site_id
WHERE CONCAT(',', `a.site_id`, ',') REGEXP ',(1|2),'
mm5n2pyu

mm5n2pyu1#

仅当您选择带有 site_id = 1 或者 site_id = 2 ,这可能就是你使用 REGEX 那里的东西。
你的问题意味着你没有任何限制 site_id 只有1或2意味着只要 site_id 正在匹配 id 应计算列总和,因此正确答案为0.49。
不管怎样,我已经尽了最大的努力来解读你的意图,所以我给你两个答案:
您的示例查询(错误结果为0.29)将正确编写为:

SELECT ROUND(SUM(a.coins),2) AS money FROM m_z_analytics a
LEFT JOIN m_b_browsing_live b ON b.id=a.site_id
WHERE a.site_id IN(1,2);

正确回答您的问题(结果=0.49)将是:

SELECT ROUND(SUM(a.coins),2) AS money FROM m_z_analytics a
LEFT JOIN m_b_browsing_live b ON b.id = a.site_id;

甚至没有 LEFT JOIN 语法相当于:

SELECT ROUND(SUM(a.coins),2) AS money FROM m_z_analytics a, 
m_b_browsing_live b WHERE b.id = a.site_id;

sql fiddle示例

相关问题