首页 > 解决方案 > 在限制子句中使用计数

问题描述

有没有办法在 SQL 查询的限制子句中使用 select count()?

原始查询:

SELECT *
FROM flight_delays
LIMIT 10;

但是像这样动态的东西:

SELECT
  *
FROM
  flight_delays
LIMIT
  (
    select
      count(foo)
    from
      bar
    group by
      bar.bing
  )

标签: sqlpostgresql

解决方案


您可以创建一个函数,该函数将首先计算 的值,LIMIT然后使用 that 执行查询LIMIT

CREATE OR REPLACE FUNCTION flight_delays_limited()
  RETURNS setof flight_delays
  $$
  DECLARE
    limitSize INTEGER = 0;
  BEGIN
  --custom logic for calculating the limit
  select
      count(foo) into limitSize
    from
      bar
    group by
      bar.bing;
  --end custom logic

  --return result from select with calculated limit
  RETURN QUERY
  SELECT * FROM flight_delays
    LIMIT limitSize;
  end;
$$ language plpgsql;

您可以像这样调用该函数:

SELECT * FROM flight_delays_limited();

推荐阅读