Вы уверены, что хотите сделать LEFT JOIN sum_revenue as s ON ad.Partner
в своем последнем запросе ?. Я протестировал эту конструкцию, и это создает так называемое декартово произведение. Все строки левой таблицы объединяются со всеми строками другой таблицы.
См .: https://en.wikipedia.org/wiki/Cartesian_product
Например:
create table testing.test_a (id INT);
create table testing.test_b (id INT);
INSERT INTO test_a VALUES(1),(2),(3),(4);
INSERT INTO test_b VALUES(1),(2),(3),(5);
# Resulting in a cartesian product (4x4 entries)
SELECT * FROM test_a AS a LEFT JOIN test_b AS b ON a.id;
+------+------+
| id | id |
+------+------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 1 | 3 |
| 2 | 3 |
| 3 | 3 |
| 4 | 3 |
| 1 | 5 |
| 2 | 5 |
| 3 | 5 |
| 4 | 5 |
+------+------+
# Correctly LEFT joining test_a and test_b would be:
SELECT a.id, b.id FROM test_a AS a LEFT JOIN test_b AS b ON a.id = b.id
# Or use the USING clause to join on column from both tables with same name.
SELECT test_a.id, test_b.id FROM test_a LEFT JOIN test_b USING(id);
+------+------+
| id | id |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | NULL |
+------+------+
Вы уверены, что в таблице sum_revenue
есть записи для всех единиц в ad_unit_table
. Если это не так, некоторые значения из sum_revenue
приводят к значениям NULL
из-за несовпадающих записей. Если вы хотите, чтобы значения соответствовали, используйте INNER JOIN
вместо LEFT JOIN
.
Также убедитесь, что, когда могут быть вычисления. ни одно из значений NULL
. Выполнение вычислений со значениями NULL
приводит к значениям NULL
.
Пример:
SELECT 100 / NULL; -- Result NULL
SELECT (10 * NULL) * 100; -- Result NULL
Без дополнительной информации, такой как определения таблиц и / или примеры данных, это все, что я могу сделать.