要为每个类别选择 N 条记录,可以执行以下操作:
SELECT category, category_id, value FROM
(
SELECT category, value, row_number() OVER (PARTITION by category) as category_id
FROM myTable
)
WHERE category_id < N;
内部 SELECT 将首先对每个类别的记录进行分区,并为每个类别的每个记录分配一个名为 category_id 的 ID。然后,外部查询将使用 category_id 来限制它查询每个类别的记录数。
这在 BIG 表上效率极低,因为即使我们只对每个类别的 N 条记录感兴趣,它也会为所有记录分配 id。
以下不适用于我正在使用的 sql 引擎 - 不确定它是否适用于任何引擎。
SELECT category, value, row_number() OVER (PARTITION by category) as category_id
FROM myTable
WHERE category_id < N
有谁知道以更好的时间复杂度实现这一目标的任何其他方法?
更多想法:
针对上述查询对以下算法进行时间分析可能会提供更多关于查询如何在后台运行的见解:
1. SELECT DISTINCT(category) FROM myTable
2. FOREACH category SELECT N rows
更多信息:我的数据由 物理分区category
,能够显式利用这将是有用的