如何列出配置单元SQL中每个类别的前10行

如何列出配置单元SQL中每个类别的前10行,sql,hiveql,hsqldb,categorical-data,Sql,Hiveql,Hsqldb,Categorical Data,我有一个表,其中包含一列带有分类数据,我们称之为“category”,另一列包含任意字符串,我们称之为“text” 现在,我希望看到每个类别的文本示例,换句话说:每个类别显示文本的前5个值。文本值不需要按任何标准排序,我不想要前5个最长的字符串或类似的东西,只需要第一个遇到的随机字符串 结果应该如下所示: +----------+------------------+ | category | text | +----------+------------------+

我有一个表,其中包含一列带有分类数据,我们称之为“category”,另一列包含任意字符串,我们称之为“text”

现在,我希望看到每个类别的文本示例,换句话说:每个类别显示文本的前5个值。文本值不需要按任何标准排序,我不想要前5个最长的字符串或类似的东西,只需要第一个遇到的随机字符串

结果应该如下所示:

+----------+------------------+
| category | text             |
+----------+------------------+
| cat A    | random string 1  |
| cat A    | random string 2  |
| cat A    | random string 3  |
| cat A    | random string 4  |
| cat A    | random string 5  |
| cat B    | random string 6  |
| cat B    | random string 7  |
| cat B    | random string 8  |
| cat B    | random string 9  |
| cat B    | random string 10 |
| cat C    | random string 11 |
| ...      | ...              |
我负担不起二次复杂度,因为这个表非常大,有几千万行

我还希望避免手动联合每个类别的子查询

select ... where category = catA
union 
select ... where category = catB
union
select ... where category = catC
union
...
因为大概有50个不同的类别

最重要的是,我不能使用任何特定于数据库的特性,因为我的数据库不是任何传统的关系数据库,而是一个只支持基本SQL语法的Apache配置单元

我知道有很多严格的要求。但如果有人知道如何用普通SQL解决这个问题,那将对我有很大帮助。谢谢。

您可以在大多数数据库中使用行号,包括蜂巢。对于每个类别的10个示例,例如:

select t.*
from (select t.*,
             row_number() over (partition by category order by category) as seqnum
      from t
     ) t
where seqnum <= 10;
您可以在大多数数据库(包括配置单元)中使用行号。对于每个类别的10个示例,例如:

select t.*
from (select t.*,
             row_number() over (partition by category order by category) as seqnum
      from t
     ) t
where seqnum <= 10;

一般的答案是:如果不支持某种程序语言和优化的分组操作,就无法实现

如果数据库系统支持从表GROUP BY category中快速选择category,并使用过程语言循环值,则可以循环GROUP BY的结果,并在每次迭代中从表中添加SELECT*的结果,其中category=categoryvalue LIMIT 5

Apache配置单元中的SQL支持在未排序的SELECT语句中包括LIMIT


还有HPL/SQL for SQL创建过程。

一般的答案是:如果不支持某种过程语言和优化的分组操作,就无法完成

如果数据库系统支持从表GROUP BY category中快速选择category,并使用过程语言循环值,则可以循环GROUP BY的结果,并在每次迭代中从表中添加SELECT*的结果,其中category=categoryvalue LIMIT 5

Apache配置单元中的SQL支持在未排序的SELECT语句中包括LIMIT


还有HPL/SQL for SQL创建过程。

@TimBiegeleisen这不是重复的。所有其他问题都要求前10个条目,这意味着按特定标准排序,而我要求任意10个条目。他们的解决方案需要对每个类别的结果进行排序,这增加了复杂性。我在问题中充分解释了它与前面的问题有何不同,请删除重复标记。@Youda008尝试Gordon的答案,但在呼叫ROW_号码时使用ORDER BY RAND。我没有看到您想要随机输入,也没有看到您正在使用Hive,抱歉。@TimBiegeleisen这不是重复项。所有其他问题都要求前10个条目,这意味着按特定标准排序,而我要求任意10个条目。他们的解决方案需要对每个类别的结果进行排序,这增加了复杂性。我在问题中充分解释了它与前面的问题有何不同,请删除重复标记。@Youda008尝试Gordon的答案,但在呼叫ROW_号码时使用ORDER BY RAND。对不起,我没有看到你想要随机输入,也没有看到你正在使用Hive。OP似乎想要按兰德排序。@TimBiegeleisen。文本值不需要按任何标准排序,我不想要前5个最长的字符串或类似的东西,只需要第一个遇到的随机字符串。OP似乎需要任意值,但兰德绝对可以接受。这一个有效,而且速度足够快,谢谢。OP似乎需要兰德的订单。@TimBiegeleisen。文本值不需要按任何标准排序,我不想要前5个最长的字符串或类似的东西,只需要第一个遇到的随机字符串。OP似乎需要任意值,但rand绝对可以接受。这一个有效,速度足够快,谢谢。