sql - 如何在聚合函数中找到前 5 个值
问题描述
我正在尝试输出 SUM(t.shares) 的前 5 个值,我还需要显示公司名称、当前股价和上次价格变化的百分比。当我在 select 中添加 sp.price 时,我还必须将其添加到 group by 中,然后表格返回太多不需要的行。有没有办法可以解决它?另外,我如何计算最后一次价格变化的百分比变化?
这是问题:
列出纽约证券交易所前 5 家公司(按股东交易量计算)。显示公司名称、股东交易量、当前价格和上次价格变化的百分比变化。按交易量的降序对输出进行排序。数据库中的样本数据仅包含 3 家公司的信息,但即使有更多公司的数据,您的查询也必须继续仅列出前 5 家公司。
select
c.name,
SUM(t.shares)
from trade t
join company c
on t.stock_id = c.stock_id
join stock_exchange se
on se.stock_ex_id = t.stock_ex_id
join stock_price sp
on sp.stock_ex_id = se.stock_ex_id
and sp.stock_id = c.stock_id
where se.name = 'New York Stock Exchange'
group by c.name;
解决方案
我相信你需要的是分析函数而不是聚合函数
在这里你可以得到这个想法:
“11克”:
SELECT * FROM (
SELECT * FROM (
select
c.*,
SUM(t.shares) over (PARTITION BY c.name) as Total_SUM
from trade t
join company c
on t.stock_id = c.stock_id
join stock_exchange se
on se.stock_ex_id = t.stock_ex_id
join stock_price sp
on sp.stock_ex_id = se.stock_ex_id
and sp.stock_id = c.stock_id
where se.name = 'New York Stock Exchange'
) ORDER BY Total_SUM DESC
) WHERE ROWNUMBER <=5;
'>= 12c':
SELECT * FROM (
select
c.*,
SUM(t.shares) over (PARTITION BY c.name) as Total_SUM
from trade t
join company c
on t.stock_id = c.stock_id
join stock_exchange se
on se.stock_ex_id = t.stock_ex_id
join stock_price sp
on sp.stock_ex_id = se.stock_ex_id
and sp.stock_id = c.stock_id
where se.name = 'New York Stock Exchange'
) ORDER BY Total_SUM DESC FETCH FIRST 5 ROWS ONLY
推荐阅读
- visual-studio-code - VScode webview 扩展 api
- android - FLUTTER:任务':app:compileFlutterBuildDebug'执行失败无法创建父目录
- c++ - 声明与 void 不兼容
- c++ - 函数调用的参数太多,预期单个参数“nums”,有 3 个参数
- windows-installer - 对 BizTalk 生成的 MSI 文件进行产品版本控制
- c# - localhost websocket (wss://localhost:xyz/) 并非对所有用户都可用
- python - 如何在 Jupyter Notebook 中导入特定版本的 numpy?
- java - 我的数组没有到达数组的最后一个元素
- react-native - React Native Linking 抛出错误:无法打开 URL:
- java - 文本上方的 JMenu 图标