如何获得一个组的最小值?
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
【讨论】:
以上是关于如何获得一个组的最小值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pymxs 获得 3ds max 中的最小 XYZ 值?