限制基于另一个表中的值计数的行输出?

  • 本文关键字:输出 另一个 sql
  • 更新时间 :
  • 英文 :


作为一个基本示例,我有一个查询,它有效地生成一个包含值(ID号)列表的表,每个值都附加到一个特定的类别。作为一个简化的例子,它将产生如下内容(但规模要大得多):

tbody> <<tr>
IDS Categories
123451型
12456类型6
776893型
32456type 4
674312型
133562型

您可以使用两个窗口函数:

  • COUNT跟踪每个类别的id数量
  • ROW_NUMBER唯一标识每个类别中的每个id

收集了这些信息后,保留满足以下条件之一的所有行就足够了:

  • 小于或等于30的行数>>
  • 的行数小于等于15祝辞祝辞小于或等于3
WITH cte AS (
SELECT IDS,
Categories,
ROW_NUMBER() OVER(ORDER BY IDS PARTITION BY Categories) AS rn
COUNT(IDS) OVER(PARTITION BY Categories)                AS cnt
FROM tab
)
SELECT * 
FROM cte
WHERE (rn <= 3 AND cnt <= 15)
OR (rn <= 6 AND cnt <= 30)

注意:如果您对特定的排序有顾虑,您需要在ROW_NUMBER窗口函数中修正ORDER BY子句。

最新更新