基于计数的psql表子选择
我有一个表,我计算每个不同id的行数。 如果行数>=6,那么我只想从原始表中选择从查询返回的id为的行 我成功地编写了代码的第一部分,如下所示基于计数的psql表子选择,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,我有一个表,我计算每个不同id的行数。 如果行数>=6,那么我只想从原始表中选择从查询返回的id为的行 我成功地编写了代码的第一部分,如下所示 select * from (select id, count(*) from flights group by id) as fcount where count >= 6 现在,我如何从表中选择与第一个选择给出的id匹配的所有行 提前感谢试试这个 SELECT * FROM ( SELECT f.*
select * from (select id, count(*) from flights group by id) as fcount where count >= 6
现在,我如何从表中选择与第一个选择给出的id匹配的所有行
提前感谢试试这个
SELECT *
FROM (
SELECT f.*
,count(*) OVER (PARTITION BY ID) AS fcount
FROM flights f
) s
WHERE fcount >= 6
或者这个
SELECT *
FROM Flights fo
WHERE EXISTS (
SELECT 1
FROM flights fi
WHERE fi.id = fo.id
GROUP BY id
HAVING COUNT(*) >= 6
)
您不需要子查询来完成第一部分:从flights GROUP BY id中选择COUNT*>=6的id,COUNT*。您甚至不需要选择COUNT*,因为您不关心实际的数字。由此看来,如何使用生成的ID列表来获取所需数据应该是显而易见的。您是否碰巧提前知道计数>=6的航班数是显著少数还是显著多数?如果是这样的话,可能有一种比目前给出的更有效的方式来编写查询。我绘制了计数数的分布图,数据集中计数大于等于6的航班占绝大多数。请检查查询计划或其效率,看看是否有用:选择*FROM flights,其中NOT id=ANYARRAYSELECT id FROM flights f GROUP BY f.id,COUNT*<6