У меня есть две таблицы - cpm
(cc
, ad_id
и cpm
) и clicks
(cc
и ad_id
).
Когда я бегу:
SELECT cpm.ad_id,
COUNT(clicks.id) * cpm.cpm AS clicks_income
FROM cpm
LEFT JOIN clicks on clicks.ad_id = cpm.ad_id and clicks.cc = cpm.cc
GROUP BY cpm.ad_id, cpm.cc
Я получил:
ad_id | clicks_income
---------------------
1 | 271.00
1 | 2.60
2 | 238.00
Теперь результат, который я хочу:
ad_id | clicks_income
---------------------
1 | 273.60
2 | 238.00
Как я могу группировать только по cpm
. ad_id
и имея СУММ всех cc
?
Когда я удаляю cpm
. cc
, я получаю:
ad_id | clicks_income
---------------------
1 | 273.00
2 | 238.00
2 ответа
Не используйте COUNT(whatever) * acolumn
, используйте вместо него SUM(AColumn)
.
Также LEFT JOIN
здесь не имеет смысла, потому что несоответствие просто добавит NULL
к сумме, что не очень помогает.
SELECT cpm.ad_id, SUM(cpm.cpm) AS clicks_income
FROM cpm INNER JOIN clicks ON clicks.ad_id = cpm.ad_id AND clicks.cc = cpm.cc
GROUP BY cpm.ad_id
SELECT cpm.ad_id, COUNT(clicks.id)*cpm.cpm AS clicks_income
FROM cpm LEFT JOIN clicks ON clicks.ad_id = cpm.ad_id AND clicks.cc = cpm.cc
GROUP BY cpm.ad_id
cc
, clicks_income неверен, см. мое изменение ^
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.