sql - 计算 SQL 中每一行的 MAX
问题描述
我有这个表:
Docenza(id, id_facolta, ..., orelez)
Facolta(id, ...)
对于每个 facolta,我只想获得完成 orelez 的最大数量和 orelez 数量的 Docenza 的 id:
id_docenzaP facolta1 max(orelez)
id_docenzaQ facolta2 max(orelez)
...
id_docenzaZ facoltaN max(orelez)
我怎样才能做到这一点?这就是我所做的:
SELECT DISTINCT ... F.nome, SUM(orelez) AS oreTotali
FROM Docenza D
JOIN Facolta F ON F.id = D.id_facolta
GROUP BY F.nome
我得到类似的东西:
docenzaP facolta1 maxValueForidP
docenzaQ facolta1 maxValueForidQ
...
docenzaR facolta2 maxValueForidR
docenzaS facolta2 maxValueForidS
...
docenzaZ facoltaN maxValueForFacoltaN
我怎样才能只为每个 facolta 取最大值?
解决方案
这是未经测试的,并且由于您没有提供具有预期结果的示例数据,我无法确定它是否真的是您需要的。
这有点难看,我敢肯定有一些聪明的相关子查询方法,但我从来都不擅长这些。
SELECT st.focolta,
s_orelez,
TMP3.id_docenza
FROM some_table AS st
INNER
JOIN (SELECT *
FROM (SELECT focolta,
s_orelez,
id_docenza,
ROW_NUMBER() OVER -- Get the ranking of the orelez sum by focolta.
( PARTITION BY focolta
ORDER BY s_orelez DESC
) rn_orelez
FROM (SELECT focolta,
id_docenza,
SUM(orelez) OVER -- Sum the orelez by focolta
( PARTITION BY focolta
) AS s_orelez
FROM some_table
) TMP
) TMP2
WHERE = TMP2.rn_orelez = 1 -- Limit to the highest rank value
) TMP3
ON some_table.focolta = TMP3.focolta; -- Join to focolta to the id associated with the hightest value.
推荐阅读
- r - 在R中按指定的时间序列扩展数据框
- amp-html - AMP 项目是否支持 Google One-tap?
- c# - AJAX 级联下拉菜单 ASP.NET MVC
- c# - C# , Xamarin.Essentials 安全存储
- https - OpsCenter 6.1.16 Datastax 代理创建到 ERROR [async-dispatch-2] 的 stomp 连接时通过 stomp 连接时出错
- node.js - JWT 的签名验证失败 - node/express/identityServer/asp.net。
- android - android studio中每个圆形按钮的单独颜色
- scala - 可以对cats.effect.IO 进行排序,即是否在Traverse 类型类中?
- android - 谷歌分析 V4 到 Firebase
- regex - 正则表达式 - 使用只有文字的正则表达式回溯