Суммируйте значения из другой таблицы, используя LEFT JOIN - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь сложить все 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 голосов
/ 29 июня 2018

Ваш конечный результат 0,29 будет только в том случае, если вы выберете записи с site_id = 1 или site_id = 2, поэтому, вероятно, вы использовали там REGEX.

Ваш вопрос подразумевает, что у вас нет ограничений на то, что site_id ТОЛЬКО 1 или 2, это означает, что до тех пор, пока site_id соответствует id, столбец SUM должен быть рассчитан, поэтому правильный ответ будет 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

...