首页 > 解决方案 > 按最常见的重复值分组

问题描述

我有一系列数据,如下所示

PRICE   AMOUNT  TOTAL   BUYER       SELLER
2.43    250     607,5   TRADER_B    TRADER_B(*)
2.43    500     1215    TRADER_D    TRADER_B(*)
2.43    13000   31590   TRADER_D    TRADER_B(*)
2.43    17000   41310   TRADER_C    TRADER_B(*)
2.43    15000   36450   TRADER_A    TRADER_B(*)
2.43    10000   24300   TRADER_E    TRADER_B(*)
2.43    20000   48600   TRADER_F    TRADER_B(*)
2.42    100     242     TRADER_A(*) TRADER_C
2.42    1500    3630    TRADER_A(*) TRADER_F
2.42    10000   24200   TRADER_A(*) TRADER_F
2.42    14500   35090   TRADER_A(*) TRADER_C
2.42    11000   26620   TRADER_A(*) TRADER_A
2.41    400     964     TRADER_A(*) TRADER_B
2.41    200     482     TRADER_B    TRADER_C
2.41    1200    2892    TRADER_C    TRADER_A
2.40    1000    2400    TRADER_B    TRADER_D
2.40    15000   36000   TRADER_F    TRADER_E(*)
2.40    20000   48000   TRADER_F    TRADER_E(*)
2.40    7500    18000   TRADER_B    TRADER_E(*)
2.40    8000    19200   TRADER_A    TRADER_E(*)
2.40    2500    6000    TRADER_D    TRADER_E(*)
2.40    3500    8400    TRADER_B    TRADER_E(*)

我的目标是在一只股票上赶上最强大的买家和卖家。这就是为什么我需要根据 BUYER 和 SELLER 列按最常见的重复值进行分组(我用 * 指定了行)。

THE BEST BUYERS     AMOUNT      TOTAL
TRADER_A            37500       90746

THE BEST SELLERS    AMOUNT      TOTAL
TRADER_E            56500       135600
TRADER_B            75750       184072

标签: sqlsql-server

解决方案


如果您希望基于每个买家的最常见价格进行聚合,则如下所示:

select bp.*
from (select buyer, price, sum(amount) as amount, sum(total) as total,
             row_number() over (partition by buyer order by count(*) desc) as seqnum
      from t
      group by buyer, price
     ) bp
where seqnum = 1;

推荐阅读