使用LEFT JOIN来自不同表的值总和

时间:2018-06-28 17:47:36

标签: php mysql regex left-join

coins具有与m_z_analytics中的site相同的数字时,我试图对id中的所有m_b_browsing_live求和(请参见下面的结果)。

表格:

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),'

1 个答案:

答案 0 :(得分:0)

仅当您选择带有while($checkeachserver < server_count) { $servernumber = 'Server'.$checkeachserver; $serverip = $ini_array.$servernumber[ServerIP]; $serverport = $ini_array.${$servernumber}[ServerPort]; print_r($serverip); $checkeachserver++ site_id = 1的记录时,您的最终结果是0.29,这可能就是您在此处使用site_id = 2的原因。

您的问题意味着您没有限制REGEX仅为1或2,这意味着只要site_idsite_id匹配,就应计算SUM列,因此正确答案将为0.49。

无论如何,我尽力去解释你想做什么,所以我给你两个答案:

您的示例查询(错误的0.29)将正确编写为:

id

正确回答您的问题(结果= 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
WHERE a.site_id IN(1,2);

或者甚至没有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

SQL Fiddle Example