首页 > 解决方案 > 计算多个类似模式并按日期汇总

问题描述

我在 Postgresql 数据库中有一个包含两列文本(字符串)和日期的表。我想搜索在给定日期的任何文本中出现了多少次字符串模式。我有

SELECT date(date), count(date) FROM table WHERE LOWER(text)
LIKE %pattern% AND date BETWEEN start AND end GROUP BY date(date) ORDER BY 1;

这给了我一列带有计数的日期,

             0    1
0   2020-09-09  714
1   2020-09-10  662
2   2020-09-11  530
3   2020-09-12  591
4   2020-09-13  669
..         ...  ...
85  2020-12-03  908
86  2020-12-04  839
87  2020-12-05  779
88  2020-12-06  758
89  2020-12-07  805

如果我有多个关键字,并且我想要一个单独的列来计算每个关键字在一天中出现的次数,我该怎么做?

谢谢

标签: sqlpostgresqlcountpivotaggregate-functions

解决方案


您将使用条件聚合:

SELECT date::date, 
    COUNT(*) FILTER (WHERE LOWER(text) LIKE '%pattern1%') as cnt1,
    COUNT(*) FILTER (WHERE LOWER(text) LIKE '%pattern2%') as cnt2
FROM table 
WHERE date BETWEEN ... AND ...
GROUP BY date::date
ORDER BY 1;

请注意,您 - 可能 - 可以使用text ILIKE ...而不是LOWER(text) LIKE ....


推荐阅读