1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   |   select pays
       , ville
       , produit
       , dense_rank() over(partition by ville order by produit asc) + dense_rank() over(partition by ville order by produit desc) - 1 as nb_produit_dst_ville
       , dense_rank() over(partition by Pays  order by produit asc) + dense_rank() over(partition by Pays  order by produit desc) - 1 as nb_produit_dst_pays
    from (values ('france', 'paris'    , 'vélo'   )
               , ('france', 'lyon'     , 'vélo'   )
               , ('france', 'paris'    , 'autobus')
               , ('france', 'marseille', 'taxi'   )
               , ('france', 'marseille', 'taxi'   )
               , ('france', 'marseille', 'taxi'   )
               , ('france', 'lyon'     , 'autobus')
               , ('espagne', 'madrid'  , 'vélo'   )
               , ('espagne', 'huesca'  , 'taxi'   )
               , ('espagne', 'leon'    , 'taxi'   )) as t (pays, ville, produit)
order by 1, 2;
 
pays     ville      produit  nb_produit_dst_ville  nb_produit_dst_pays
-------  ---------  -------  --------------------  -------------------
espagne  huesca     taxi                        1                    2
espagne  leon       taxi                        1                    2
espagne  madrid     vélo                        1                    2
france   lyon       vélo                        2                    3
france   lyon       autobus                     2                    3
france   marseille  taxi                        1                    3
france   marseille  taxi                        1                    3
france   marseille  taxi                        1                    3
france   paris      vélo                        2                    3
france   paris      autobus                     2                    3 | 
Partager