PostgreSQL:如何在同一视图统计作者发文量与已通过文章数
合并统计查询的解决方案
没问题,你可以用条件聚合把两个统计逻辑合并到一个SQL查询里,一次性得到每个作者的总发文数和已通过文章数,不用分开查询再手动合并。下面是具体实现方法:
核心查询语句
SELECT author AS AUTHOR, COUNT(*) AS TEXTS, COUNT(CASE WHEN approved = 'OK' THEN 1 END) AS TEXTSAPPROVED FROM tb_author GROUP BY author ORDER BY author;
逻辑解释
COUNT(*):统计每个作者分组下的所有记录数,也就是总发文数。COUNT(CASE WHEN approved = 'OK' THEN 1 END):通过CASE表达式筛选已通过的记录——只有当approved='OK'时返回1,否则返回NULL;而COUNT函数会自动忽略NULL值,这样就精准统计出了每个作者的已通过文章数。
你也可以用SUM函数实现同样效果,写法更直观:
SELECT author AS AUTHOR, COUNT(*) AS TEXTS, SUM(CASE WHEN approved = 'OK' THEN 1 ELSE 0 END) AS TEXTSAPPROVED FROM tb_author GROUP BY author ORDER BY author;
这里SUM会把符合条件的记录加1,不符合的加0,最终结果和COUNT方式完全一致,选你习惯的写法就行。
创建视图
如果需要把这个统计结果保存为视图,只需在查询前加上CREATE VIEW语句:
CREATE VIEW author_text_stats AS SELECT author AS AUTHOR, COUNT(*) AS TEXTS, COUNT(CASE WHEN approved = 'OK' THEN 1 END) AS TEXTSAPPROVED FROM tb_author GROUP BY author ORDER BY author;
之后直接查询这个视图就能快速获取统计数据了。
内容的提问来源于stack exchange,提问作者robert_gonzalez
相关产品推荐
相关产品推荐

