sql - 按最常见的重复值分组
问题描述
我有一系列数据,如下所示
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
解决方案
如果您希望基于每个买家的最常见价格进行聚合,则如下所示:
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;
推荐阅读
- python - opencv(RGB -> LAB)中的颜色空间转换 - 红色不会产生预期值
- python - 如何修复用于验证外部文件的代码?
- html - 如何在 html 静态页面中使用材质图形元素?
- c# - C#查找字符串中间字符的最佳方法
- swift - SwiftUI - 具有多个核心数据实体的本地通知标识符
- python - RuntimeError:未找到最佳参数:函数调用次数已达到 maxfev=600
- reactjs - React table - 在手动分页中强制重置页面索引
- database - 将列与postgressql中的文本数组进行比较
- ruby-on-rails - 活动记录模型的翻译
- javascript - 使用本机消息在 Chrome 中的 NTLM 弹出窗口中填写用户名和密码