在postgresql中基于计数大于2获取记录

6ovsh4lw  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

我有一个名为user_activity的表。
| 用户标识|book_id|事件类型标识|
| --|--|--|
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 2 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
event_type_id表示“用户已查看图书”。
我想写一个Postgresql查询来获取用户查看两次以上的图书ID,如下所示-
| 用户id|查看图书ID|
| --|--|
| 1 |一、二|

smtd7mpg

smtd7mpg1#

您必须执行两次GROUP BY--user_id, book_id提取符合条件的用户手册对(内部子查询),然后user_id对结果执行。

SELECT user_id,
  STRING_AGG(book_id::text, ',') viewed_book_ids
FROM (
 SELECT user_id, book_id
 FROM user_activity
 WHERE event_type_id = 1
 GROUP BY user_id, book_id
 HAVING COUNT(*) > 2
) AS t
GROUP BY user_id;

字符串
DB-fiddle
viewed_book_ids的用途是什么呢?也许它作为数组(使用array_agg而不是string_agg)或JSONB数组(使用jsonb_agg)比逗号分隔的列表文本更有用。

相关问题