Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
Sql 每个字段的限制_Sql_Postgresql_Greatest N Per Group - Fatal编程技术网

Sql 每个字段的限制

Sql 每个字段的限制,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,假设我们有这样一个sql查询,其中包含来自另一个表的连接数据 SELECT pr.num, pr.resort_id, p.src_mask FROM rutraveler.rt_photo_resort AS pr JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id WHERE pr.resort_id = '612' AND p.src_mask is not null ORDER BY num LIMIT

假设我们有这样一个sql查询,其中包含来自另一个表的连接数据

SELECT 
    pr.num, pr.resort_id, p.src_mask
FROM 
    rutraveler.rt_photo_resort AS pr
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id
WHERE   pr.resort_id = '612' AND p.src_mask is not null
ORDER BY num
LIMIT 30
到目前为止,我们必须对几个度假村id进行几次查询。 如何更改查询,使我们只有一个查询,其中resort\u id位于612、333、111中,每个resort\u id的结果不超过30个项目?

使用ROW\u NUMBER统计每个resort\u id的行数

您可以使用带有行号和分区的CTE


如果没有分区排序,结果是错误的。
SELECT resort_id, num, resort_id, src_mask 
FROM
(
  SELECT 
    pr.resort_id, pr.num, pr.resort_id, p.src_mask,
    ROW_NUMBER() OVER (PARTITION BY pr.resort_id ORDER BY num) AS rn
  FROM 
    rutraveler.rt_photo_resort AS pr
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id
  WHERE resort_id in (612, 333, 111) AND p.src_mask is not null
) data
WHERE rn <= 30
ORDER BY resort_id, num;
WITH Results_CTE AS
(
    SELECT 
    pr.num, pr.resort_id, p.src_mask,ROW_NUMBER() over ( PARTITION BY pr.resort_id ORDER BY num) As Row_number
FROM 
    rutraveler.rt_photo_resort AS pr
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id
WHERE   pr.resort_id IN (A,B,C) AND p.src_mask is not null   
)

SELECT *
FROM Results_CTE
WHERE Row_number <= 30