我有一个表,该表包含带有分类数据的列(我们称其为“类别”)和另一列包含任意字符串(我们称其为“文本”)。
现在,我想为每个类别查看几个文本示例,换句话说:对于每个类别,请显示文本的前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 Hive。
我知道很多严格的要求。但是,如果有人知道如何用普通的SQL解决这个问题,那对我会有很大帮助。谢谢。
您可以row_number()
在包括Hive在内的大多数数据库中使用。每个类别有10个示例,例如:
select t.*
from (select t.*,
row_number() over (partition by category order by category) as seqnum
from t
) t
where seqnum <= 10;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句