PostgreSQL在新闻数据库中找到3篇最受欢迎的文章

时间:2017-05-28 04:26:41

标签: sql postgresql

我目前正在尝试在数据库中找到3篇最受欢迎的文章。我想打印出每个的标题和观看量。我知道为了这样做,我必须将两个表(文章和日志)连接在一起。

文章表中有一列标题,另一列标题为slug。

日志表中有一列路径,格式为/ article /' slug'。

我如何加入这两个表,过滤掉与articles表的slug列比较的路径,并使用count来显示它被查看的次数?

使用的正确查询是:

SELECT title, count(*) as views 
FROM articles a, log l 
WHERE a.slug=substring(l.path, 10) 
GROUP BY title 
ORDER BY views DESC 
LIMIT 3;

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您只需要使用聚合基于一列连接两个表。问题是您无法直接比较它们,但之前必须使用一些string functions

假设这样的架构:

article
| title  | slug   |
-------------------
| title1 | myslug |
| title2 | myslug |

log
|          path          |
--------------------------
| /article/'myslug'      |
| /article/'unmentioned' |

尝试以下内容:

select title, count(*) from article a join log l where concat('''', a.slug, '''') = substring(l.path, 10) group by title;

对于更复杂的查询,首先编写较小的查询可以帮助您稍后找出整个查询。例如,只检查字符串函数是否返回您期望的内容:

select substring(l.path, 10) from log l;
select concat('''', a.slug, '''') from article a;