Les données sur lesquelles je travaille se présentent comme ci-dessous -
A_ID B_ID count 123 aaaa 3000 456 bbbb 6000
Je veux pouvoir extraire le B_id qui a le plus grand nombre pour un A_id donné
Le le résultat devrait ressembler à-
A_ID B_ID count 123 abcd 1000 123 aaaa 2000 123 aaaa 3000 456 null 50 456 bbbb 6000 456 cccc 450
Comment obtenir ce résultat?
3 Réponses :
Vous pouvez utiliser l'agrégation dans BigQuery:
select array_agg(t order by count desc limit 1)[ordinal(1)].* from t group by a_id;
Une option consiste à filtrer avec une sous-requête:
select t.* except(rn) from ( select t.*, rank() over(partition by a_id order by count desc) rn from mytable t ) t where rn = 1
Vous pouvez également utiliser les fonctions de fenêtre:
select t.* from mytable t where t.count = (select max(t1.count) from mytable t1 where t1.a_id = t.a_id)
Ci-dessous, pour BigQuery Standard SQL
Row a_id b_id count 1 123 aaaa 3000 2 456 bbbb 6000
s'il faut appliquer aux exemples de données de votre question - le résultat est
#standardSQL SELECT AS VALUE ARRAY_AGG(t ORDER BY count DESC LIMIT 1)[OFFSET(0)] FROM `project.dataset.table` t GROUP BY a_id