简体   繁体   English

如何从一组中获取最大值?

[英]How get the max value from a group by?

I want to do a GROUP BY by id_municipio and cbo, and than I want to select the cbo with max amount by id_municipio.我想通过 id_municipio 和 cbo 进行GROUP BY ,然后我想 select 以 id_municipio 为最大数量的 cbo。

I have been trying:我已经试了:

SELECT id_municipio, cbo_2002, COUNT(*) as N_CBO
 FROM basedosdados.br_me_rais.microdados_vinculos
 WHERE ano = 2020 
 AND id_municipio IN (1200401, 3503208, 3543402)
 GROUP BY id_municipio, cbo_2002

And I get something like:我得到类似的东西:

id_municipio | cbo_2002 | N_CBO
-----------------------
1200401      | 3860     | 250 
1200401      | 3548     |  28
1200401      | 4420     |  12
3503208      | 6851     |   5
3503208      | 3860     | 250
3503208      | 2204     | 350
3503208      | 5222     |1000
3543402      | 5222     |   2
3543402      | 7        | 780
3543402      | 6650     | 660

Now, I expect to have one row by each id_municipio and the cbo with the max value (n_cbo), something like:现在,我希望每个 id_municipio 和具有最大值 (n_cbo) 的 cbo 有一行,例如:

id_municipio | cbo_2002
-----------------------
1200401      | 3860
3503208      | 5222
3543402      | 7

select   id_municipio
        ,cbo_2002
from    (select id_municipio 
               ,cbo_2002
               ,row_number() over (partition by id_municipio order by N_CBO desc) as rn
         from   t) t
where    rn = 1  
id_municipio id_municipio cbo_2002 cbo_2002
1200401 1200401 3860 3860
3503208 3503208 5222 5222
3543402 3543402 7 7

Fiddle小提琴

Try this:尝试这个:

WITH cte AS (
    SELECT
        id_municipio,
        cbo_2002,
        COUNT(*) AS n_cbo
    FROM
        basedosdados.br_me_rais.microdados_vinculos
    GROUP BY
        1, 2
)
SELECT * FROM (
    SELECT
        id_municipio,
        cbo_2002,
        n_cbo,
        ROW_NUMBER() OVER(
            PARTITION BY id_municipio, cbo_2002 ORDER BY n_cbo DESC
        ) AS rn
    FROM cte
)
WHERE rn = 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM