sql-server - 带引用的 SQL MIN、MAX 窗口查询
问题描述
我有一个使用 min 和 max 窗口函数的报告中的工作查询,但我需要提取 min 和 max 的引用。这是主要查询:
SELECT
company,
countryname,
dept,
unit,
score,
MAX(score) OVER(PARTITION BY company) AS max_comp_score,
--need reference countryname, dept, unit for this max score
MIN(score) OVER(PARTITION BY company) AS min_comp_score,
--need reference countryname, dept, unit for this min score
AVG(score) OVER(PARTITION BY company) AS avg_comp_score
FROM
tt.vw_Score_Report
该视图非常大(5 百万行),因此如果我对 min 和 max 进行子查询以从那里提取它们的引用,则需要很长时间才能检索它们。
将这些属性获取到查询的选项是什么?认为可能有一些优雅的方法来解决这个问题。
解决方案
您可以使用 aCROSS APPLY
来获取最小和最大行:
SELECT
company,
countryname,
dept,
unit,
score,
srmin.countryname,
srmin.dept,
...
srmax.countryname,
srmax.dept,
srmax.score,
.....
AVG(score) OVER(PARTITION BY company) AS avg_comp_score
FROM tt.vw_Score_Report sr
CROSS APPLY ( SELECT TOP 1 countryname, dept, unit ,score
FROM tt.vw_Score_Report sr2
WHERE sr2.company = sr.company
ORDER BY score DESC
) srmax
CROSS APPLY ( SELECT TOP 1 countryname, dept, unit ,score
FROM tt.vw_Score_Report sr3
WHERE sr3.company = sr.company
ORDER BY score ASC
) srmin
推荐阅读
- c# - 如何转换 IEnumerable
到 C# 中的字节 []? - email - 电子邮件 550 5.4.1 从 Sendgrid 到 Outlook 的访问被拒绝
- javascript - 为什么这是“你好,世界!” JavaScript 代码片段被识别为可接受的程序指令?
- c - 重复代码的分离 - common.h 文件 - 使用自定义参数声明函数
- linux-kernel - 是否可以使用 RARP 在 uboot 中传输文件?
- vba - 删除两个文件夹上的标志状态
- sql - SQL Calculating Median per Product in Cursor
- c++ - std::map, std::unordered_map - 在初始化列表中缩小转换
- python - 在 for 循环中使用 df.query() 提取行数?
- kubernetes - 对 Terraform 列表使用花括号而不是方括号