1

我有一个名为 Ads 的表,每个广告包含一行。

| 身份证 | 广告标题 | 广告说明 | ... |

我还有 3 个名为 Applications、Referals 和 Subscribers 的表,每个应用程序、引荐和订阅者的行都与广告相关联。

| 身份证 | 广告ID | 申请人姓名 | 申请人邮箱 | ... |

| 身份证 | 广告ID | 推荐人邮箱 | 推荐电子邮件 | ... |

| 身份证 | 广告ID | 订阅者电子邮件 | ... |

最后,我有一个名为 Views 的表,其中每个广告都有一行,其中包含该广告的总视图数。

| 身份证 | 广告ID | 意见 |

我正在尝试编写一个查询,其中包含 6 列中每个广告的摘要:广告 ID、广告标题、应用程序/推荐人/订阅者的数量和总浏览量。

对我一直使用的所有表的简单查询:

SELECT *
FROM Ads
LEFT JOIN Applications ON Ads.ID = Applications.AdID
LEFT JOIN Referrals ON Ads.ID = Referrals.AdID
LEFT JOIN Subscribers ON Ads.ID = Subscribers.AdID
LEFT JOIN Views ON Ads.ID = Views.AdID

我尝试了很多 LEFT 和 INNER 联接、GROUP BY、COUNT(...)、COUNT(DISTINCT ...) 和 SUM(CASE ...) 的组合,但到目前为止没有任何效果。我最终从以前的列中计算 NULL 值,计算条目两次或根本不计算,计算 Views 表中的行数而不是将它们加在一起等等。

将其拆分为多个查询是否更好,或者是否有一种很好的方法可以用一个查询来归档我想要的内容?

4

1 回答 1

0

试试这个

SELECT *,
(select count (*) from Applications as A1 where A.ID = A1.AdID ) as Applicants,
(select count(*) from Referrals as R where A.ID = R.AdID ) as Referrals,
(select count(*) from Subscribers as S where A.ID = S.AdID ) as Subscribers,
(select count(*) from Views  as V where A.ID = V.AdID ) as Views
FROM Ads as A
于 2013-11-07T11:05:50.153 回答