Postgres COUNT FILTER 语法错误 - 为什么?

Tam*_*gár 3 postgresql count postgresql-9.1

有人能找到我为什么这个查询会产生语法错误吗?这是一个简单的广告数据库,其中包含类别和广告。查询得到一个广告类别列表,加上它有多少个广告和多少个活动广告,后者意味着不超过 2 周的广告。PostgreSQL 说:

"(" 行 5: FILTER(WHERE ads..^) 处或附近的语法错误

另一个 COUNT 工作得很好。我不明白 FILTER 子句有什么问题。谢谢!

    $data = pg_query($dbconn, 'SELECT categories.id,
                                  categories.name,
                                  COUNT(ads.id) AS ads_count,
                                  COUNT(ads.id) 
                                      FILTER (WHERE ads.date > '.strtotime('-2 weeks').') 
                                      AS ads_active_count
                           FROM erpatak.ads_categories AS categories
                           LEFT JOIN erpatak.ads AS ads ON ads.category = categories.id'
                           .$filter.'
                           GROUP BY categories.id, categories.name
                           ORDER BY name 
                           OFFSET '.$offset.' 
                           LIMIT '.$maxcount);
Run Code Online (Sandbox Code Playgroud)

Tam*_*gár 5

好的,我找到了解决方案。正如 Kamil G. 向我透露的那样,无法在我这里的 9.1 版中过滤 COUNT。解决办法是:

COUNT(CASE WHEN ads.date > '.strtotime('-2 weeks').' THEN 1 END) AS ads_active_count