sql join,where,having子句有问题

vbkedwbf  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我很难理解如何在视图方面显示“三篇最受欢迎的文章”(“status:200 ok”)的查询。
我目前正在处理两个表。
日志表
文章表
这些表中的列:表“public.log”

Column |           Type           |                    Modifiers                     
--------+--------------------------+--------------------------------------------------
 path   | text                     | 
 ip     | inet                     | 
 method | text                     | 
 status | text                     | 
 time   | timestamp with time zone | default now()
 id     | integer                  | not null default nextval('log_id_seq'::regclass)

索引:

Table "public.articles"

 Column |           Type           |                       Modifiers                       
--------+--------------------------+-------------------------------------------------------
 author | integer                  | not null
 title  | text                     | not null
 slug   | text                     | not null
 lead   | text                     | 
 body   | text                     | 
 time   | timestamp with time zone | default now()
 id     | integer                  | not null default nextval('articles_id_seq'::regclass)

索引:
.
到目前为止,我已经根据自己的水平和对sql的当前理解编写了这个查询。。。

SELECT articles.title, log.status 
FROM articles join log
WHERE articles.title = log.path
HAVING status = “200 OK”
GROUP BY title, status

显然,这是不正确的。我想能够从数据库中提取三个最流行的文章,我知道“匹配”的200确定与“文章标题”将显示或计数在我一个“看法”或命中。我的思考过程是这样的,我需要通过创建一个查询来确定article.title=log.path(1 unique)在日志数据库中显示了多少次(状态为200ok)。我的任务实际上是编写一个程序,用“[我的代码得到]数据库,通过使用连接、聚合和where子句来完成繁重的工作。。在python代码本身中进行最小的“后处理”
任何解释,想法,小费都很感激。。。

kiz8lqtg

kiz8lqtg1#

也许以下是你的想法:

SELECT
    a.title,
    COUNT(*) AS cnt
FROM articles a
INNER JOIN log l
   ON a.title = l.path
WHERE
    l.lstatus = '200 OK'
GROUP BY
    a.title
ORDER BY
    COUNT(*) DESC
LIMIT 3;

这将返回具有最高状态200命中率的三篇文章标题。这个答案假设您使用的是mysql。

相关问题