如何获得一个组的最小值?

Posted

技术标签:

【中文标题】如何获得一个组的最小值?【英文标题】:How to get minimum value of a group? 【发布时间】:2020-01-27 18:05:13 【问题描述】:

我需要获取每个项目(PrjCode)的最小 lineTotal 的报价注释。如何得到它 以下查询我已经尝试过,但没有奏效

  select distinct a.PrjCode,b.LineTotal as 'Neg.rate',(case when min(b.LineTotal) = b.LineTotal then c.Comments end)
from OPRJ a
Left Join PQT1 b on b.Project = a.PrjCode
Inner Join OPQT c on c.DocEntry = b.DocEntry
Group by a.PrjCode,a.PrjName,b.LineTotal,c.Comments
having min(b.LineTotal) = b.LineTotal
Order by a.PrjCode

输出如下

预期输出如下

【问题讨论】:

编辑您的问题并显示示例数据以及所需的结果。某种 db fiddle 也很有帮助。 【参考方案1】:

当您使用 group by 时,您不需要使用 distinct,尽管没有可用的示例数据,只是假设下面可能对您有用

select  a.PrjCode,b.LineTotal as 'Neg.rate',
min(c.Comments )
from OPRJ a
Left Join PQT1 b on b.Project = a.PrjCode
Inner Join OPQT c on c.DocEntry = b.DocEntry
Group by a.PrjCode,a.PrjName,b.LineTotal    
Order by a.PrjCode

【讨论】:

【参考方案2】:

试试这个查询

     SELECT c.PrjCode, b.LineTotal AS 'Neg.rate', e.Comments FROM ( 
     (SELECT a.PrjCode, MIN(b.LineTotal) AS LineTotal FROM OPRJ a
     LEFT JOIN PQT1 b ON b.Project = a.PrjCode GROUP BY a.PrjCode)c
     INNER JOIN  PQT1 d ON d.Project = c.PrjCode AND d.LineTotal = c.LineTotal
     INNER JOIN  OPQT e ON e.DocEntry = d.DocEntry ORDER BY c.PrjCode)f;

【讨论】:

【参考方案3】:

试试这个

select  a.PrjCode,b.LineTotal as 'Neg.rate', c.Comments
from OPRJ a
Left Join PQT1 b on b.Project = a.PrjCode
Inner Join OPQT c on c.DocEntry = b.DocEntry
Group by a.PrjCode
Order by b.LineTotal, a.PrjCode

【讨论】:

以上是关于如何获得一个组的最小值?的主要内容,如果未能解决你的问题,请参考以下文章

获取 ActiveRecord 中每个组的最小值/最大值

如何使用 pymxs 获得 3ds max 中的最小 XYZ 值?

如何获得数组中的 10 个最小值? [关闭]

使用 panda apply() 函数将每个子组的所有值替换为子组最小值(无循环)

如何获得向量中的最大值或最小值?

如何获得向量中的最大值或最小值?