【问题标题】:MySQL: Sum count of a group and join the result?MySQL:一个组的总和并加入结果?
【发布时间】:2026-01-11 07:15:01
【问题描述】:

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

// coupons
couponId
couponName

// targets
targetId
url
fk_coupons_targets // foreign key    

// visits
visitId
urlVisited
fk_targets_visits // foreign key

应根据匹配的 visit.urlVisited 行进行计数,以统计给定 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;

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

【问题讨论】:

  • 请描述表之间的外键链接。目标表中哪个字段对应优惠券表中的couponId字段?连接访问的字段也是目标表

标签: mysql join group-by


【解决方案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;

【讨论】:

  • 如果失败,请尝试添加有关您的表结构和示例数据的更多信息。
最近更新 更多