sql - 将两个 group by 和 count 条件合二为一
问题描述
在我的表中,变量的结构如下:在 eachID
中,有多行date
变量,在每个日期中,有多行session
变量,在每个会话中,有transactions
. 我想按 2 个group by
条件查询表:1)我想按事务数少于 300 行的 ID 清理表组,2)按大于 5 的 ID、日期、会话计数分组。
代码通过两个单独的块顺序查询数据,我怎样才能将它们组合成一个?
# group by ID
CREATE TABLE A as(
SELECT ID, date, session, transaction, v1, v2
FROM data
WHERE ID IN
(SELECT ID
FROM data
GROUP BY ID
HAVING count(*) < 300)
);
# group by ID, session, transaction
CREATE TABLE B as (
SELECT ID, date, session, transaction, v1, v2
FROM A
WHERE ID IN
(SELECT ID
FROM data
GROUP BY ID, date, session
HAVING count(*) > 5));
谢谢
解决方案
我想按条件按 2 组查询表:1)我想按事务少于 300 行的 ID 清理表组,2)按大于 5 的 ID、日期、会话计数分组。
我假设你想结合这两个条件。您可以使用窗口函数:
select d.*
from (select d.*,
count(*) over (partition by id) as cnt_transaction,
count(*) over (partition by id, date_session) as cnt_id_date_session
from data d
) d
where cnt_transaction < 300 and cnt_id_date_session > 5;
推荐阅读
- laravel - fwrite(): send of 249 bytes failed with errno=10053 已建立的连接被主机中的软件中止
- javascript - 我可以在 reactjs 的类之外声明一个全局变量吗
- reactjs - 卸载 create-react-app 的问题
- java - 在 Spring Boot 2.2.x 上执行多个 mongo 时,没有可用类型为“....mongodb.core.convert.MappingMongoConverter”的合格 bean
- reactjs - 如何将 reacr SSR 应用程序部署到 AWS 并删除端口
- r - 带有 ggplot2 的程序化饼图
- nlp - 提取具有相似项目的实体时的 Dialogflow 问题
- wordpress - 为什么我在向 MemberPress 端点发出请求时收到 rest_forbidden 错误?
- testng - testng 套件结果未提供正确的计数
- python - 在 Python 问题中转换为二进制字符串