sql - 计算多个类似模式并按日期汇总
问题描述
我在 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
如果我有多个关键字,并且我想要一个单独的列来计算每个关键字在一天中出现的次数,我该怎么做?
谢谢
解决方案
您将使用条件聚合:
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 ...
.
推荐阅读
- javascript - 将 Cytoscape JS 与 JHipster Angular 一起使用
- android - 收到“错误:未找到 ID 为 'com.google.gms.google-services' 的插件”错误
- java - 可选的导入包不在 karaf 捆绑解析器内接线。jersey-media-multipart 的问题
- java - Spring批处理 - 工作步骤执行上下文与数据库中的上下文不对齐
- python - 从索引号列表中提取列名
- c# - 隐藏具有特定值 C# WPF 的 DataGrid 行
- wpf - 如何以编程方式调整 DrawingVisual 的大小?
- reactjs - Material-UI 中心按钮文本忽略图标
- c - 在没有内置库的情况下在 C 中反转字符串时面临的问题
- c++ - c++ 为什么会这样:cout << obj + (class_name)a << endl;