python - 选择关联表中至少有 30 个 id 实例的所有行
问题描述
我有一个关联表 PostToTag,它只包含 2 列 post_id 和 tag_id。我想过滤掉包含 tag_id 的每一行,在 PostToTag 表中该 tag_id 的实例少于 30 个。
SELECT ptt.post_id, ptt.tag_id, COUNT(tag_id) n FROM PostToTag ptt GROUP BY tag_id HAVING n >= 30
上面的代码接近我需要的,但我想获取所有 tag_id,就好像我没有使用 GROUP BY 一样。我习惯于在 R 中使用 dplyr,并且能够在执行聚合函数后取消组合。在 SQL 中“取消分组”的传统方法是什么?
解决方案
嗯。. . 使用窗口函数:
SELECT ptt.*
FROM (SELECT ptt.*,
COUNT(*) OVER (PARTITION BY ptt.tag_id) as cnt
FROM PostToTag ptt
) ptt
WHERE cnt >= 30;
推荐阅读
- python - 在 mac os 和 python 中设置 SIGKILL 处理程序时出现 OSError
- c# - 如何通过cmd运行多个specflow项目?
- ios - 带有 Firebase iOS 云消息通知的 Amazon SNS 不起作用
- amazon-s3 - 公开 AWS CodeBuild 工件
- python - 根据另一列中的 ID 列表替换一列的值
- amazon-web-services - 获取 Terraform Code 和 AWS / Cloud 之间的区别
- javascript - 使用jquery动态设置数据属性的问题
- javascript - 将 mongodb 从 Heroku 转移到 localhost 后的 JS 加载问题
- c# - 依赖注入 ILoggerFactory,中间件中的 ILogger,记录器未执行
- c++ - 虚幻引擎 4.25 Gauntlet 测试