mysql - 连接后 SQL 内连接返回错误值
问题描述
我有两个名为ads
and的表videos
。类似的尺寸date,ad_id,ad_name,campaign_name
在两个表中都很常见。但是,ads 表有spend
和表有。当我按此表中的每一个进行分组时,我正在汇总的指标的值似乎很好。但是一旦我加入他们,返回输出就不正确例如,如果我加入他们时第 1 天的总支出用于特定的 ad_id,我将其视为.impressions
videos
videoviews
100
400
SELECT
a.date adsdate, a.campaign_name campaign_name,
a.ad_group_name ad_group_name,
a.ad_name ad_name,
a.ad_id ad_id,
SUM(a.cost) fb_cost,
SUM(a.impressions) fb_impressions,
SUM(b.action_video_view) fb_videoview
FROM
fb_ads a inner join
`fb_videos b ON
CONCAT(a.date,'_',a.ad_id)=
CONCAT(b.date,'_',b.ad_id)
GROUP BY
adsdate,
campaign_name,
ad_group_name,
ad_name,
ad_id
HAVING
ad_id = ‘1234567’
order by
adsdate asc
解决方案
检查这个:
SELECT adsdate,
a.campaign_name,
a.ad_group_name,
a.ad_name,
'1234567' ad_id,
a.fb_cost,
a.fb_impressions,
b.fb_videoview
FROM ( SELECT `date` adsdate,
campaign_name,
ad_group_name,
ad_name,
SUM(cost) fb_cost,
SUM(impressions) fb_impressions
FROM fb_ads
WHERE ad_id = '1234567'
GROUP BY 1,2,3,4 ) a
JOIN ( SELECT `date` adsdate,
SUM(action_video_view) fb_videoview
FROM fb_videos
WHERE ad_id = '1234567'
GROUP BY 1 ) b USING (adsdate)
我将如何通过使用 concat – sten 加入来做到这一点
您使用唯一的ad_id
值 (ad_id = '1234567') - 所以加入它没有任何意义,加入adsdate
就足够了。
但是,如果您想通过 2 列加入,那么您不需要串联。使用以下任何加入条件:
.. ON t1.ad_id = t2.ad_id AND t1.adsdate = t2.adsdate ..
.. ON (t1.ad_id, t1.adsdate) = (t2.ad_id, t2.adsdate) ..
.. USING (ad_id, adsdate) ..
所有这些形式都是您表达的绝对等价物,CONCAT
但更加快速和清晰。
推荐阅读
- google-apps-script - 如何在不删除容器/文件的情况下同时从多个 Google 文档或表格中删除容器绑定脚本?
- r - 在ggplot2的geom中调用alpha参数时如何更改连续比例图例的透明度?
- json - JSON 无法将数据获取到 SQLite3 表中
- c++ - 调车场算法动态函数生成
- c++ - 我的代码没有执行 Visual Studio 2017,C++
- c# - 如何检查游戏对象是否有任何类型的组件?
- java - 在 TextView 中保留最近收到的短信
- javascript - 从顶部动画不使用负值?
- c++ - 在 C++ 中生成复合排列的优雅方法
- python - 尽管提供了 conda 路径,但 Mac 上的 Pycharm 错误“没有为项目配置 Python 解释器”