Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于计数的psql表子选择_Sql_Postgresql_Postgresql 9.1 - Fatal编程技术网

基于计数的psql表子选择

基于计数的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.*

我有一个表,我计算每个不同id的行数。 如果行数>=6,那么我只想从原始表中选择从查询返回的id为的行

我成功地编写了代码的第一部分,如下所示

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