2 回答
TA贡献1815条经验 获得超6个赞
如果您想要没有收入的用户,那么您需要一个外连接(或相关子查询)。所以,我建议:
select ur.user_id, ur.cdate, ur.revenue,
ur.revenue + coalesce(sum(urp.revenue), 0) as total_revenue
from user_revenue ur left join
user_revenue_publisher urp
on urp.cdate = ur.cdate and
urp.user_id = ur.user_id
where ur.user_id = ? and
ur.cdate >= curdate() - interval 30 day
group by ur.user_id, ur.cdate, ur.revenue;
笔记:
这
= $id
表明您正在使用文字值修改查询字符串。的?
手段-使用的参数。使用有意义的表别名,这样查询更容易遵循。
您需要
left join
将所有行保留在第一个表中,即使第二个表中没有行。因此,您需要处理
NULL
可能产生的值。
TA贡献1951条经验 获得超3个赞
有几个问题: GROUP BY 需要所有不是聚合函数的列(如SUM(). 此外,您REVENUE在查询中显示两列,但在示例中只显示一列,因此很难判断哪一列是问题(虽然我认为它是 sum())。
我认为这应该给你你想要的:
SELECT a.user_id,
a.cdate,
a.revenue,
SUM(b.revenue) AS total_revenue
FROM user_revenue a
INNER JOIN user_revenue_publisher b
ON a.cdate = b.cdate
WHERE a.user_id= $id group by a.User_ID,a.revenue, a.cdate
- 2 回答
- 0 关注
- 396 浏览
添加回答
举报