MySQL:对一个组求和并加入结果?

时间:2019-07-28 00:26:05

标签: mysql join group-by

在MySQL中,我想合并来自优惠券,目标和访问表的表行。它们的关联方式是1张优惠券只能有1个目标。目标是网址和其他一些显示设置。一个目标可以有很多访问。

// coupons
couponId
couponName

// targets
targetId
url
fk_coupons_targets // foreign key    

// visits
visitId
urlVisited
fk_targets_visits // foreign key

应根据匹配的visits.url进行计数,以统计给定target.url收到的访问次数。

预期的查询应该具有一条记录,该记录最终可以输出到这样的表中:

couponId: 1 
targetUrl: example.com/page1 
number of visits: 3

目前,我不确定这是否需要“求和”查询和“联接”查询,或者是否可以或应该同时进行。这就是我到目前为止所拥有的。

// select every visit record and group a numeric count of 
// records by same url value (in visits table)

select count(*) from visits 
group by urlVisited;



// left join all coupon ids by matching foreign key in target 
// table. Then inner join all summed visits by matching url in
// targets table

select * from coupons c
left join targets t on t.fk_targets_coupons = c.couponId
inner join visits v on v.urlVisited = t.url;

我不清楚如何连接总和值。我的第二个查询看起来就像将忽略总和,只是在访问中返回一堆匹配的行,这是不希望的。该查询实际上应如何编写?

1 个答案:

答案 0 :(得分:-1)

尝试一下

select c.couponId,t.url,count(v.visitId) 
from coupons c
join targets t on c.couponId=t.fk_coupons_targets
join visits v on t.url=v.urlVisited
group by c.couponId;