select
(select
row_number() over (partition by name order by rand()) as rn
from table_name
where condition) t
where t.rn <= 2
举个????,有以下表内数据name |scorea |10a |11b |9b |10b |8a |3a |7c |4c
一、ElasticSearch的分组聚合
官网文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation
实现背景:实现类似SQL的group by功能:
select team,age from a_perso
ID与XID是联合主键,row_number()里面只按ID分组,存在同一ID同一DT有多条数据,按DT降序排序会失效,此时函数会对这多条数据随机排出123名,每执行一次脚本,结果会有差异。
如果外层查询是通过限制`WHERE RN=1`来取值,那取值结果就会存在随机性。...
直接看代码吧
select t.classno ,t.sno,t.score
ntile(5) over(partition by classno order by t.sno) as ntile
from t_score t order by ntile
意思:根据 classno
分组后再进行每个相同classno的集合尽量地平均分5组。
group by是分组函数,partition by是分区函数(像sum()等是聚合函数),注意区分。
1、over函数的写法:
over(partition by class order by sroce)
先对class中相同的进行分区,在class中相同的情况下对sroce进行排序
例:查询每个班的第一名的成绩:如下
SELECT *
FROM (select name,class,sr...