sql-从多个联接表中获取匹配行的计数

肯尼迪

我正在尝试获取属于我的“广告”表(也属于用户)中的各个行的点击和观看次数。我还尝试按观看次数最多的广告来排序结果。

我的表结构:

用户:

id name
1  James

广告:属于用户(FK:user_id)

id user_id
22 1
23 4

观看次数:属于广告(FK:ad_id)

id ad_id
1  22
2  22
3  23

点击次数:属于广告(FK:ad_id)

id ad_id
1  22
2  22
3  23

在上面的表格中,我想要一个结果,其中包含有关ID为1的用户的所有广告的数据以及每个广告的点击次数和观看次数

id user_id clicks_count views_count
22 1       2            2

这就是我到目前为止所拥有的。使用此SQL,我只获得一个/第一个“ ads”行的正确视图和点击次数,但是忽略了其他匹配的行。

SELECT ads.id, COUNT(DISTINCT views.id) AS view_count, COUNT(DISTINCT clicks.id) AS click_count   
FROM users
INNER JOIN ads ON ads.`user_id` = users.`id`
INNER JOIN views ON ads.id = views.`ad_id`
INNER JOIN clicks ON ads.id = clicks.`ad_id`
WHERE users.`id` = 1
GROUP BY views.`ad_id`
ORDER BY `view_count` DESC

这是一个sqlfiddle http://sqlfiddle.com/#!2/5c43c/1/0

提前致谢

叶夫根尼·卡巴涅茨(Yevgeniy Kabanets)

您需要使用LEFT OUTER JOIN不丢失点击次数的广告

SELECT ads.id, COUNT(DISTINCT views.id) AS view_count, COUNT(DISTINCT clicks.id) AS click_count   
    FROM users
    INNER JOIN ads ON ads.`user_id` = users.`id`
    LEFT JOIN views ON ads.id = views.`ad_id`
    LEFT JOIN clicks ON ads.id = clicks.`ad_id`
    WHERE users.`id` = 1
    GROUP BY ads.`id`
    ORDER BY `view_count` DESC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新查询从SQL Server 2008中的源表中多个匹配的行?

来自分类Dev

如何在SQL中按日期范围联接多个表?

来自分类Dev

SQL Server Pivot用于计数联接表中的实例

来自分类Dev

sql联接如何联接多个表

来自分类Dev

SQL查询联接多个表

来自分类Dev

sql-从多个联接表中获取匹配行的计数

来自分类Dev

SQL Server:从联接的表中更新多个记录

来自分类Dev

SQL查询:无法从多个表中获取一个时间戳之间的值计数

来自分类Dev

SQL计数表联接表

来自分类Dev

SQL Server 2012:如何从多个表联接中获取计数组

来自分类Dev

在SQL中联接多个表后如何计数记录

来自分类Dev

SQL:计数(*)期望多个匹配

来自分类Dev

在Oracle SQL中对外部联接表使用模式匹配

来自分类Dev

从SQL Server中的多个表中按顺序获取行

来自分类Dev

SQL联接表和GROUP BY以获取正确的行

来自分类Dev

返回多个SQL表的行计数列表

来自分类Dev

来自多个表的SQL计数行

来自分类Dev

SQL JOIN查询以返回在联接表中未找到匹配项的行

来自分类Dev

如何从SQL中的单个联接获取多个列名?

来自分类Dev

如何获取SQL Server中的联接表的计数?

来自分类Dev

SQL联接多个表并获取数据

来自分类Dev

SQL Server:从联接的表中更新多个记录

来自分类Dev

SQL联接多个表

来自分类Dev

如何在SQL Server 2008中将行更改为列(多个表,联接等)

来自分类Dev

SQL重复行多个联接

来自分类Dev

我想用来从SQL Server的右表中找不到的左表中获取行的联接

来自分类Dev

SQL:联接选择缺少行的多个表

来自分类Dev

SQL查询在左联接中没有匹配的行时获取所有行

来自分类Dev

在 SQL Server 中使用联接从表的两行中获取单行

Related 相关文章

热门标签

归档